是否带 null 会对 (anti) semi join 产生很大的影响,因为 join 的 eq 条件正常是 true or false
但是 null 的存在,eq 判断会存在 true or false or null 三种状态,null 的时候会需要特殊的处理
导致最后的查询计划是走笛卡尔积+filter 的形式,性能就会比较差
tidb 6.3 的时候对这块有一些优化,做了 null aware anti join,https://github.com/pingcap/tidb/issues/37525
对于 null aware anti join 这个话题,oracle 应该是有一个这样的专利的
https://patents.google.com/patent/US7676450B2/en