Почему эти запросы возвращают разные результаты? - PullRequest
0 голосов
/ 02 октября 2019

Оба этих запроса к серверу sql должны возвращать один и тот же результат подсчета, но возвращает разные значения - 8219 и 7876. При левом соединении должны возвращаться все строки из левой таблицы (8219). В чем может быть причина такого результата (7876)?

select count(*)
from t1 left join t2 on t1.id=t2.id
where t2.[date]='20191001'
-- returns 7876

select count(*)
from t1 left join t2 on t1.id=t2.id
-- returns 8219 

select count(*)
from t2
where [date]<>'20191001' or [date] is null
-- returns 0

1 Ответ

0 голосов
/ 02 октября 2019

Ваш первый запрос имеет LEFT JOIN, но предложение WHERE превращает его во внутреннее соединение, потому что оно отфильтровывает все значения NULL.

Правильное решение - переместить условиек пункту ON:

select count(*)
from t1 left join
     t2
     on t1.id = t2.id and t2.[date] = '20191001';
...