С точки зрения эквивалентных запросов, единственный раз, когда это действительно имеет значение, это внешние соединения. В тех случаях, если вы ставите критерии в объединении или где это имеет значение. Один применяется до/во время внешнего соединения, а другой - после соединения. Таким образом, условия в том, где нужно обрабатывать нули в качестве внешнего соединения, не могут привести к фактическому соединению. Таким образом, два запроса для внешнего соединения не эквивалентны.
Иногда во внутренних соединениях будет иметь значение, если условие приведет к преобразованию поля в другой тип. Если это так, могут возникать проблемы преобразования типов, которые мешают ему работать должным образом. Другими словами, если сравнение столбца с целым числом с столбцом строки и столбцом строки содержит «ТЕСТ», хорошо, что у вас будет плохое время. Если вы не исключите эти строки через условие соединения.
С точки зрения производительности вы хотите установить условия в соединении, которые попадут в индекс, который вы хотите использовать. Кроме того, они должны идти в разделе where, если они не нужны в соединении.
Но ваш пример может быть не лучшим. Он выглядит как все проверки против определенных полей для определенных значений. Если у вас есть условия, которые просто проверяют значение из одной таблицы на константу или переменную, они обычно не используются в качестве условий соединения.
Проверьте планы выполнения, это так просто. Также оптимизатор запросов может генерировать один и тот же план для обоих, но, как всегда, это зависит. – lad2025
И обратите внимание, что результат для обоих запросов будет другим, если вместо этого вы используете 'left join'. –
Вы можете включить Планы выполнения в раскрывающемся списке Query. После выполнения запроса он покажет вам вычислительную стоимость каждой выполняемой операции и более подробную информацию при наведении курсора на значок. – jjjjjjjjjjj