Существует одна ситуация, когда может произойти нечто подобное: когда нет строк, соответствующих P_1
для WHERE P_1 AND P_2
. P_2
даже не оценивается, так как false AND P
равно false независимо от P
.
Рассмотрим этот пример:
CREATE TABLE elbat
(nmuloc_1 VARCHAR(8),
nmuloc_2 VARCHAR(8));
INSERT INTO elbat
(nmuloc_1,
nmuloc_2)
VALUES ('A',
'aaa'),
('B',
'bbb'),
('C',
'ccc');
SELECT *
FROM elbat
WHERE nmuloc_2 = 123;
-- Fails with "Conversion failed when converting the varchar value 'aaa' to data type int."
SELECT *
FROM elbat
WHERE nmuloc_1 = 'X'
AND nmuloc_2 = 123;
-- Succeeds
дб <> скрипка
Во втором запросе SELECT
нет строк для nmuloc_1 = 'X'
. Так что nmuloc_2 = 123
не оценивается и запрос выполняется успешно. (С пустым набором результатов.)
В первом nmuloc_2 = 123
- единственный предикат. Он должен быть оценен, и запрос завершается с ошибкой преобразования.