我有2张桌子。我希望使用FULL OUTER JOIN
从表中获取记录,同时从其中一个表中过滤掉一些数据。
我应该获得的总记录是23966.但是,以下查询会返回不同的结果。
查询1 -
SELECT DISTINCT pu.id,
vm.id
FROM table1 vm
FULL OUTER JOIN (SELECT DISTINCT pu.id
FROM table2 pu
WHERE pu.column1 = 'filter1'
AND pu.column2 = 'filter2') pu ON vm.id = pu.id;
输出 - 23966行(预期)。
查询2 -
SELECT DISTINCT pu.id,
vm.id
FROM table1 vm
FULL OUTER JOIN table2 pu ON vm.id = pu.id AND pu.column1 = 'filter1' AND pu.column2 = 'filter2';
输出 - 48804行。
查询3 -
SELECT DISTINCT pu.id,
vm.id
FROM table1 vm
FULL OUTER JOIN table2 pu ON vm.id = pu.id
WHERE (pu.column1 = 'filter1' AND pu.column2 = 'filter2')
OR (pu.column1 IS NULL AND pu.column2 IS NULL);
输出 - 21830。
根据我的理解,至少第三个查询也应该给我与查询1相同的结果。有人可以解释一下SQL Server如何处理这3个查询吗?