Details
-
Wish
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
None
Description
There is a wide-range poorly-understood issue in how WHERE and ON clauses work in the case of outer joins.
The WHERE filter is applied after the join. After an outer join, the INNER table (the left table in a RIGHT OUTER, or the left table in the LEFT OUTER) has all columns set to NULL for all rows. As a result, if ANY of them are cited in the WHERE clause, they will equal NULL. This almost always causes the join to effectively be an INNER join, even though the user typed the word O-U-T-E-R, probably for good reason.
In strict mode, we should not allow ANY COLUMNS from the inner table to appear in the WHERE clause.