我想知道两个查询是否总会返回相同的结果.他们是平等的吗?
SELECT OT_ACC_NO , ACC_NO FROM ACCOUNTS
JOIN OTHER_TABLE ON OT_ACC_NO = ACC_NO
WHERE ACC_NO IS NOT NULL
SELECT OT_ACC_NO , ACC_NO FROM ACCOUNTS
JOIN OTHER_TABLE ON OT_ACC_NO = ACC_NO
WHERE OT_ACC_NO IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
两者是等价的.或许更令人惊讶的是该WHERE条款是不必要的.所以,这是等价的:
SELECT OT_ACC_NO, ACC_NO
FROM ACCOUNTS JOIN
OTHER_TABLE
ON OT_ACC_NO = ACC_NO;
Run Code Online (Sandbox Code Playgroud)
为什么?因为INNER JOIN只有在ON条件为真时才返回行.如果任一值为NULL,则比较返回NULL,将其视为false.
我应该注意,虽然最终结果是相同的,但查询的执行计划可能不一样.