如果表已加入,Where Statement是否重要?

Lic*_*tia 1 sql oracle

我想知道两个查询是否总会返回相同的结果.他们是平等的吗?

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)

Gor*_*off 5

两者是等价的.或许更令人惊讶的是该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.

我应该注意,虽然最终结果是相同的,但查询的执行计划可能不一样.