• Tom Lane's avatar
    Simplify overcomplicated (and overly restrictive) test to see whether an · 7920ed38
    Tom Lane authored
    IS NULL condition is rendered redundant by detection of an antijoin.
    If we know that a join is an antijoin, then *any* Var coming out of its
    righthand side must be NULL, not only the joining column(s).  Also,
    it's still gonna be null after being passed up through higher joins,
    whether they're outer joins or not.  I was misled by a faulty analogy
    to reduce_outer_joins() in the original coding.  But consider
    
    select * from a left join b on a.x = b.y where b.y is null and b.z is null;
    
    The first IS NULL condition justifies deciding that the join is an antijoin
    (if the = is strict) and then the second one is just plain redundant.
    7920ed38
initsplan.c 49.2 KB