Разница между внутренним соединением и где в select join SQL statement

У меня есть две команды select join SQL:

select a.id from table_a as a, table_b as b where a.id=b.id;
select a.id from table_a as a inner join table_b as b on a.id=b.id;

Очевидно, что они одинаковы в результате. Но есть ли разница между ними, например, производительность, переносимость.

Ответ 1

Одно отличие состоит в том, что первый вариант скрывает намерение, выражая условие соединения в предложении where.

Второй вариант, когда условие объединения выписано, более понятен для пользователя, читающего запрос. Он показывает точное намерение запроса.

Что касается производительности или любой другой разницы, их не должно быть. Оба запроса должны возвращать тот же самый результат и выполнять то же самое в большинстве СУБД.

Ответ 2

Синтаксис внутреннего соединения был добавлен в SQL в 90-е годы. Возможно, но маловероятно, что оптимизатор может сделать с ним лучше, чем со старым синтаксисом, который использовал предложение where для условия соединения.

Они должны быть очень переносимыми, как сейчас.

Синтаксис внутреннего соединения предпочтительнее, потому что это проще для читателя, как уже отмечали другие.

Ответ 3

Оба являются стандартными SQL. Различные системы БД могут оптимизировать их по-разному, но поскольку они настолько просты, я был бы немного удивлен, если они это сделают. Но это характер SQL: он декларативный, что дает реализации большую свободу действий в том, как выполнить ваш запрос. Нет никакой гарантии, что они выполнят то же самое, или если они отличаются, что происходит быстрее.

Ответ 4

Они одинаковы на сервере SQL. Разницы в производительности нет.