Check whether the `op` condition is null rejected, if yes, derive
`col is not null` for both sides of inner join, and for inner side
of outer join.
Also, remove duplicate conditions before pushing them down. Check
if the condition is mutable before removing duplicates.
For AntiSemiJoin, AntiLeftOuterSemiJoin and LeftOuterSemiJoin, do
not generate new `is not null` conditions.
- extract `outerCol = const` from join conditions and filter conditions,
substitute `outerCol` in join conditions with `const`;
- extract `outerCol = innerCol` from join conditions, derive new join
conditions based on this column equal condition and `outerCol` related
expressions in join conditions and filter conditions;