I always assumed that a statement of the following form
SELECT * FROM A LEFT JOIN B ON (A.column1 = B.column2 AND B.column2 = 12321)
is always equivalent to
SELECT * FROM A LEFT JOIN B ON (A.column1 = B.column2)
WHERE B.column2 = 12321
In more general terms:
SELECT * FROM A LEFT JOIN B ON (FOREIGN-KEY AND FILTER_ON(B))
WHERE FILTER_ON(A)
should be equivalent to
SELECT * FROM A LEFT JOIN B ON (FOREIGN-KEY)
WHERE FILTER_ON(A) AND FILTER_ON(B)
This does not seem to be the case... The first type gives a larger number of resulting rows than the second.
Question: In which cases is my assumption wrong?