我有 2 张桌子。我想从两个表中获取记录,同时FULL OUTER JOIN
从其中一个表中过滤掉一些数据。
- 14026 - 公共记录的总数。
- 8428 - 表 1 中的唯一记录
- 1512 - 表 2 中的唯一记录。
我应该得到的总记录是 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 如何处理这三个查询吗?