В MySQL JOINнеквалифицированное написание подразумевает INNER JOIN. Другими словами, INNERin не INNER JOINявляется обязательным. INNERи CROSSявляются синонимами в MySQL. Для ясности я пишу, JOINесть INNER JOINли у меня условие соединения и CROSS JOINесли у меня нет условия.
Допустимый синтаксис для объединений описан в документации .
Прямо сейчас я думаю, что автономный JOIN - это не что иное, как (идентичное) использование запятых и предложений WHERE.
Эффект тот же, но история за ними другая. Синтаксис запятой взят из стандарта ANSI-89. Однако есть ряд проблем с этим синтаксисом, поэтому в стандарте ANSI-92 было введено ключевое слово JOIN.
Я настоятельно рекомендую всегда использовать синтаксис JOIN, а не запятую.
T1 JOIN T2 ON ...читабельнее чем T1, T2 WHERE ....
- Он более удобен в обслуживании, потому что взаимосвязи таблиц и фильтры четко определены, а не смешаны вместе.
- Синтаксис JOIN легче преобразовать во OUTER JOIN, чем синтаксис с запятой.
- Смешивание запятой и синтаксиса JOIN в одном операторе может привести к любопытным ошибкам из-за правил приоритета.
- При использовании синтаксиса JOIN вероятность случайного создания декартова произведения меньше из-за забытого предложения соединения, потому что предложения соединения написаны рядом с соединениями, и легко увидеть, отсутствует ли оно.