两个SQL连接表示法之间有什么区别?

Sle*_*ght 6 sql t-sql sql-server

SQL 1: select * from t1 join t2 on t1.f1 = t2.f2

SQL 2: select * from t1,t2 where t1.f1 = t2.f2

他们返回的结果是一样的.它们之间有什么不同吗?例如,在DBMS如何运行它们或在查询计划中?

Jon*_*ler 11

两个查询之间没有操作差异.

但是,显式连接符号是更好的学习和使用方式; 离开另一个(尚未更改)遗留代码.


Jak*_*sel 6

一种是旧式,一种是新的(ANSI)式.我发现为什么你想要使用新风格的主要原因是外部连接的标准支持.使用旧样式,外部联接是特定于供应商的.新款有标准:

select * from t1 left outer join t2 on t1.f1 = t2.f2
Run Code Online (Sandbox Code Playgroud)

在您的示例中,SQL 1是新的,SQL 2是旧样式,顺便说一句.

  • 确实是 - 实际上,这里有另一个问题就这个非常不同而发布:http://stackoverflow.com/questions/8251323/oracle-style-joins-in-sql-server (2认同)