Если запрос содержит соединение с несколькими ограничениями соединения, оцениваются ли ограничения в порядке слева направо или SQL Server определяет оптимальный способ их оценки?
В надежде прояснить я попытаюсь объяснить, почему я спрашиваю. Допустим, у меня есть таблица с именем Alpha и в ней есть два столбца в дополнение к стандартному идентификатору. Первый столбец называется Generic1 и представляет собой varchar (20). Второй называется Тип и является smallint . Если Type = 1 , тогда значение Generic1 будет фактически ID записи в другой таблице (назовем это Bravo ) , Если Type = 2 , то значение Generic1 будет представлять собой текстовое значение.
Я хочу написать следующий запрос:
select * from Beta b
left outer join Alpha a on a.Type = 1 and a.Generic1 = b.ID
Если я могу с уверенностью предположить, что SQL Server будет только пытаться сравнить a.Generic1 = b.ID ПОСЛЕ того, как он сравнил a.Type = 1 , тогда я не буду надо беспокоиться об ошибках приведения / преобразования. Я бы хотел, чтобы в SQL не использовался синтаксис, допустимый только в SQL Server, если это возможно.
Я предполагаю, что SQL Server оценивает их так, как считает нужным, поэтому мне придется добавить CAST , чтобы быть в безопасности.