Очевидно, что сервер MS Sql поддерживает теорию короткого замыкания, чтобы повысить производительность, избегая ненужных проверок,
Пример поддержки:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
Здесь первый пример может привести к ошибке: «Преобразование не удалось при преобразовании значения varchar« A »в тип данных int.»
В то время как второе выполняется легко, поскольку условие 1 = 1 оценивается как ИСТИНА, и, таким образом, второе условие вообще не выполняется.
Дальше больше
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
здесь первое условие будет оценено как ложное, и, следовательно, СУБД перейдет ко второму условию, и вы снова получите ошибку преобразования, как в примере выше.
ПРИМЕЧАНИЕ: Я НАПИСАЛ НЕПРАВИЛЬНОЕ СОСТОЯНИЕ, ТОЛЬКО ДЛЯ РЕАЛИЗАЦИИ ПОГОДЫ СОСТОЯНИЕ ИСПОЛНЕНО ИЛИ КОРОТКОЕ ЗАКЛЮЧЕНИЕ
ЕСЛИ ЗАПРОСЫ РЕЗУЛЬТАТОВ В ОШИБКЕ ОЗНАЧАЕТ ИСПОЛНЕННОЕ СОСТОЯНИЕ, КРАТКОЕ ЗАКЛЮЧЕНИЕ ИНОЕ.
ПРОСТОЕ ОБЪЯСНЕНИЕ
Рассмотрим,
WHERE 1 = 1 OR 2 = 2
поскольку первое условие оценивается как ИСТИНА , бессмысленно оценивать второе условие, потому что его оценка по любому значению
никак не повлияет на результат, поэтому Sql Server предоставляет хорошую возможность сэкономить время выполнения запроса, пропуская ненужную проверку или оценку условий.
в случае «ИЛИ» , если первое условие оценивается как ИСТИНА вся цепь, соединенная «ИЛИ» , будет считаться оцененной как истинная без оценки др.
condition1 OR condition2 OR ..... OR conditionN
если условие1 оценивается как истинное, все остальные условия оставляются до тех пор, пока условие N будет пропущено.
В общих словах при определении первого ИСТИНА все остальные условия, связанные с ИЛИ, будут пропущены.
Рассмотрим второе условие
WHERE 1 = 0 AND 1 = 1
поскольку первое условие оценивается как FALSE бессмысленно оценивать второе условие, потому что его оценка по любому значению
это никак не повлияет на результат, поэтому Sql Server снова предоставляет хорошую возможность сэкономить время выполнения запроса, пропуская ненужную проверку или оценку условий.
в случае "И" , если первое условие оценивается как ЛОЖЬ вся цепь, связанная с "И" , будет считаться оцененной как ЛОЖЬ без оценивая других.
condition1 AND condition2 AND ..... conditionN
если условие1 оценено как ЛОЖЬ , остальные условия до тех пор, пока условиеN будет пропущено.
В общих словах при определении первого FALSE все остальные условия, связанные с AND , будут пропущены.
ПОЭТОМУ Мудрый ПРОГРАММЕР ДОЛЖЕН ВСЕГДА ПРОГРАММИРОВАТЬ ЦЕПЬ УСЛОВИЙ В ТАКОМ СПОСОБЕ, КОТОРЫЙ МЕНЬШЕ ДОРОГО ИЛИ БОЛЬШЕ УСТРАНЯЮЩЕЕ СОСТОЯНИЕ ПОЛУЧАЕТ ОЦЕНКУ,
ИЛИ УСТАНАВЛИВАЙТЕ СОСТОЯНИЕ В ТАКОМ СПОСОБЕ, КОТОРЫЙ МОЖЕТ ПОЛУЧИТЬ МАКСИМАЛЬНУЮ ВЫГОДУ КОРОТКОГО ЗАМЫКАНИЯ