Для меня большая ценность использования правильных предложений соединения - это отделение стандартных условий соединения (которые будут применяться почти в каждом запросе, включающем эти две таблицы) от специальных фильтров для этого запроса который вернет нужные строки:
SELECT
C.FullName,
C.CustomerCode,
O.OrderDate,
O.OrderTotal,
OD.ExtendedShippingNotes
FROM
Customer C
INNER JOIN Order O ON C.CustomerID = O.CustomerID
INNER JOIN OrderDetail OD ON O.OrderID = OD.OrderID
WHERE
C.CustomerStatus = 'Preferred'
AND O.OrderTotal > 1000.0;
Это разделение означает, что разработчик, рассматривающий запрос, не должен иметь дело с кучей беспорядка при поиске отличительных признаков этого запроса. Если он знаком с таблицами, он может полностью пропустить предложение FROM и просто прочитать предложение WHERE, чтобы получить всю необходимую ему информацию. Это быстрее . И если вам все равно, быстрее, даже если вы просто сканируете запросы глазными яблоками, я не хочу с вами работать.
Теперь для тех, кто думает, что есть что-то особенное в расположении всего, когда используется синтаксис JOIN, вы ошибаетесь. Следующий запрос работает так же хорошо, как и верхний:
SELECT
C.FullName,
C.CustomerCode,
O.OrderDate,
O.OrderTotal,
OD.ExtendedShippingNotes
FROM
Customer C
CROSS JOIN Order O
INNER JOIN OrderDetail OD
ON C.CustomerID = O.CustomerID
AND C.CustomerStatus = 'Preferred'
AND O.OrderTotal > 1000.0
WHERE
O.OrderID = OD.OrderID;
Этот запрос, вероятно, даже имеет точно такой же план выполнения. Удивлены? Не будь Как и синтаксис старого стиля, оптимизатор - это тот, кто отвечает за выяснение того, как объединять ваши таблицы на основе заданных вами условий. Неважно, где условия, если они не ссылаются на таблицу, которая еще не была упомянута.