SELECT
a.foo
b.bar
c.foobar
FROM tableOne AS a
INNER JOIN tableTwo AS b ON a.pk = b.fk
LEFT JOIN tableThree AS c ON b.pk = c.fk
WHERE a.foo = 'something'
AND c.foobar = 'somethingelse'
Имея предложение where и предложение where, похоже, превращают левое соединение во внутреннее соединение. Поведение, которое я вижу, это если в tableThree нет "somethingelse", будет возвращено 0 строк.
Если я перейду c.foobar = 'somethingelse' в предложение join, то сохраненное соединение будет действовать как левое соединение.
SELECT
a.foo
b.bar
c.foobar
FROM tableOne AS a
INNER JOIN tableTwo AS b ON a.pk = b.fk
LEFT JOIN tableThree AS c ON b.pk = c.fk
AND c.foobar = 'somethingelse'
WHERE a.foo = 'something'
Может кто-нибудь указать мне на какую-то документацию, описывающую, почему это происходит? Чрезвычайно важно