Это действительно зависит от привычек, но я всегда находил синтаксис Oracle с запятыми более естественным. Первая причина в том, что я думаю, что использование (INNER) JOIN снижает читабельность. Второе о гибкости. В конце концов, объединение является декартовым произведением по определению. Вам не обязательно ограничивать результаты на основе идентификаторов обеих таблиц. Хотя это очень редко, вполне может понадобиться декартово произведение двух таблиц. Ограничение их на основе идентификаторов - это очень разумная практика, но НЕ ПРАВИЛО . Однако, если вы используете ключевое слово JOIN , например, в. SQL Server, он не позволит вам опустить ключевое слово ON . Предположим, вы хотите создать комбинированный список. Вы должны сделать так:
SELECT *
FROM numbers
JOIN letters
ON 1=1
Кроме того, я считаю, что синтаксис Oracle (+) также очень разумен. Это хороший способ сказать: « Добавить эту запись также в набор результатов, даже если она нулевая. » Это намного лучше, чем синтаксис RIGHT / LEFT JOIN , потому что факта нет ни левого ни правого! Когда вы хотите объединить 10 таблиц с несколькими различными типами внешних объединений, возникает путаница, какая таблица находится «слева», а какая справа.
Кстати, в качестве более общего комментария я не думаю, что переносимость SQL больше существует в практическом мире. Стандартный SQL настолько плох, и столь часто требуется выразительность разнообразного специфического синтаксиса СУБД, я не думаю, что 100% переносимый код SQL является достижимой целью. Самым очевидным доказательством моего наблюдения является старый добрый номер строки проблемный. Просто поищите в любом форуме « sql row number» , включая SO, и вы увидите сотни сообщений, спрашивающих, как этого можно достичь в конкретной СУБД. Аналогично и в связи с этим, ограничивает количество возвращаемых строк , например ..