select *
from emp
where empno not in (select distinct mgr
from emp)
以下写法结果正常
select *
from emp
where empno not in (select distinct mgr
from emp
where mgr is not null);
原因:null不能参与比较运算符,即与任何数据比较结果都为null,
- 如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)
- 如果null参与比较运算,则结果可视为false。(例如:>=,<=,<> 大于,小于,不等于)
- 如果null参与聚集运算,则聚集函数都置为null。除count(*)之外。
- 如果在not in子查询中有null值的时候,则不会返回数据。
in不存在上述问题
select *
from emp
where empno in (select distinct mgr
from emp);