Oracle为什么exists/not exists容易产生FILTER,而in很少会产生FILTER呢?
当子查询关键字(union/union all/start with connect by/rownum/cube/rollup),子查询会被固化为一个整体,采用exists/not exists这种写法,这时子查询中有主表连接列,只能是主表通过连接列传值给子表,所以CBO只能选择FILTER。而我们如果将SQL改写为in/not in这种写法,子查询虽然被固化为整体,但是子查询中没有主表连接列字段,这个时候CBO就不会选择FILTER。