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