В дополнение к замечанию Марка о том, что использование последнего синтаксиса помогает избежать непреднамеренного пропуска условия объединения, одна приятная вещь в синтаксисе SQL 99 состоит в том, что если ваше соглашение об именовании столбцов заключается в том, что имя столбца в соответствия родительской и дочерней таблиц, вы можете использовать предложение USING, а не предложение ON, то есть
SELECT <<list of columns>>
FROM a JOIN b USING( acc )
JOIN c USING( acc )
Это может улучшить читаемость кода и снизить вероятность того, что вы введете ошибки, непреднамеренно присоединившись к таблицам. Если бы у меня был никель каждый раз, я бы случайно написал что-то вроде
SELECT <<list of columns>>
FROM a,
a_to_b,
b
WHERE a.a_id = a_to_b.a_id
AND b.b_id = a_to_b.a_id -- a_to_b.**a_id** rather than a_to_b.**b_id**
когда я действительно имел в виду
SELECT <<list of columns>>
FROM a,
a_to_b,
b
WHERE a.a_id = a_to_b.a_id
AND b.b_id = a_to_b.b_id
Я бы был богатым человеком. Или, по крайней мере, достаточно для хорошего ужина с суши.
В большинстве случаев, конечно же, сразу становится очевидным, что вы сделали что-то не так, потому что данные полностью ошибочны, но иногда случается, что результаты достаточно близки, что не сразу очевидно, что вы сделали что-то не так и только намного позже вы обнаружите ошибку и отследите преступника. В принципе невозможно совершить такую ошибку, если вы напишите запрос с предложением USING
SELECT <<list of columns>>
FROM a JOIN a_to_b USING (a_id)
JOIN b USING (b_id)