Теоретически разницы нет.
Иногда, особенно с более простыми оптимизаторами, существуют различия в плане запросов в зависимости от порядка предложений в предложении WHERE. Есть довольно сильный аргумент, что такие различия являются симптомом ошибки.
Аналогичные комментарии применимы и к порядку присоединения. Порядок объединений не должен иметь значения - для объединений одного типа. Ясно, имеет ли значение таблица Table2 с внутренним или внешним соединением с другой таблицей Table1 - и имеет значение, является ли она Table1 LEFT JOIN Table2
или Table1 RIGHT JOIN Table2
или Table1 FULL JOIN Table2
. Но для ряда операций INNER JOIN последовательность не должна иметь значения. Порядок обработки может быть в некоторой степени принудительным, если вы имеете дело с цепочкой объединений.
Уточнение (снова) - рассмотрим:
(Table1 AS t1 JOIN Table2 AS t2 ON t1.pkcol = t2.fkcol) AS j1
JOIN
(Table3 AS t3 JOIN Table4 AS t4 ON t3.pkcol = t4.fkcol) AS j2
ON j1.somecol = j2.anothercol
Как написано, программист ожидает, что объединения в (t1, t2) и (t3, t4) будут выполнены до объединения в (j1, j2), но оптимизатор может выполнить объединения по-другому. Например, если j1.somecol получен из Table1, а j2.anothercol получен из Table4, оптимизатор может выбрать объединение в Table1.SomeCol = Table4.AnotherCol среди других объединений. На этот тип проблем могут влиять условия фильтрации в предложении WHERE, а также наличие или отсутствие соответствующих индексов в различных таблицах. Именно здесь статистика может сыграть большую роль в том, как оптимизатор создает план запроса.