SQL происходит от реляционной алгебры .
Одним из способов увидеть разницу является то, что JOIN - это операции над наборами, которые могут дать больше записей или меньше записей в результате, чем вы имели в исходных таблицах. С другой стороны, ГДЕ всегда будет ограничивать количество результатов.
Остальная часть текста является дополнительным объяснением.
Обзор типов соединений см. article снова.
Когда я сказал, что условие where всегда будет ограничивать результаты, вы должны принять во внимание, что когда мы говорим о запросах к двум (или более) таблицам, вы должны каким-то образом объединить записи из этих таблиц, даже если нет Ключевое слово JOIN.
Таким образом, в SQL, если таблицы просто разделяются запятой, вы фактически используете CROSS JOIN (декартово произведение), которое возвращает каждую строку из одной таблицы для каждой строки в другой.
И поскольку это максимальное количество комбинаций строк из двух таблиц, результаты любого WHERE для перекрестно соединенных таблиц могут быть выражены как операция JOIN.
Но держите, есть исключения из этого максимума, когда вы вводите соединения LEFT, RIGHT и FULL OUTER.
LEFT JOIN объединит записи из левой таблицы по заданному критерию с записями из правой таблицы, НО, если критерии объединения, просмотр строки из левой таблицы не удовлетворяет ни одной записи в правой таблице, LEFT JOIN будет по-прежнему возвращать запись из левой таблицы, а в столбцах, которые будут приходить из правой таблицы, он будет возвращать NULL (RIGHT JOIN работает аналогично, но с другой стороны, FULL OUTER работает как оба одновременно).
Поскольку перекрестное соединение по умолчанию НЕ возвращает эти записи, вы не можете выразить эти критерии объединения с условием WHERE, и вы вынуждены использовать синтаксис JOIN (исключение oracle к этому было с расширением стандарта SQL и оператора to =, но это не было принято ни другими поставщиками, ни стандартом).
Кроме того, объединения, как правило, но не всегда, совпадают с существующей ссылочной целостностью и предполагают отношения между сущностями, но я бы не придавал этому большого значения, поскольку условия where могут делать то же самое (за исключением упомянутого выше случая) и для хорошей СУБД не будет иметь значения, где вы укажете свои критерии.