你这个查询有问题是因为 你那个子查询里面有空值 因为空值是不参与运算比较的 所以排除不掉的,因为你是比较S# 所以条件里把S# 处理好 结果就是你想要的数据
select s#,sname from s
where s# in
(
Select S# from sc
Where c#='C2' and S# is not null and S# <>''
) ;
select s#,sname from s
where s# in
(
Select S# from sc
Where c#='C2' and isnull(grade,'') <> ''
isnull(grade,'')<>''