自从有了hash join semi之后,in 和exists的效率不再被人诟病,并且两者是等价的。但是 not in 和not exists如果不加其他限制条件,两者往往不是等价的。
使用scott账户演示。
emp总共14行记录,其中有一行mgr为空
使用not in 结果为空,也就是mgr为空使用not in 会返回null,而not in 会把null当做false处理
使用not exists 将mgr为空的列返回了,也就是not exists会将null结果当做true对待。
所以使用not in 和not exists要注意一下对null的处理。可以在使用not in 的时候加入非空限定