INNER JOIN和COMMA的区别

6

我在下面的两个查询中得到了相同的结果和相同的执行计划,有什么区别吗?还是只是我喜欢写查询的方式不同?

SELECT PS.StepID,PR.ProgramID FROM ProgramSteps PS, Programs PR
WHERE PS.ProgramID = PR.ProgramID

SELECT PS.StepID,PR.ProgramID FROM ProgramSteps PS
INNER JOIN Programs PR ON PS.ProgramID = PR.ProgramID

重复标记将进一步解释,但作为一个经验法则,您应该始终使用JOIN而不是逗号。 - Tyler Roper
1
它们生成相同的计划,但隐式(,)已被弃用**超过25年**,而显式(JOIN)是标准。 - Siyual
你的两个查询应该产生相同的结果集,但是逗号版本已经被ANSI-92 SQL标准弃用了,这个标准已经发布了25年以上。按照惯例,正如Gordon Linoff在SO上已经说了数百次的那样,_始终_使用显式连接。 - Tim Biegeleisen
2
@VictorHugoTerceros 是的,隐式的 INNER JOIN 仍然可用,但是在 SQL Server 2016 中不支持 OUTER JOIN 隐式语法 (*=)。 - Siyual
3
@Siyual - (,)并没有被弃用。你发布了标准,我进行了搜索。如果你能指出哪些页面上写到逗号已经被弃用,我将不胜感激。 - Vérace
显示剩余3条评论
1个回答

6

两者的区别在于第一种选项通过在where子句中表达连接条件来隐藏意图。

第二个选项,将联接条件写出更加清晰,对于阅读查询的用户来说更明确地显示了查询的确切意图。

就性能或其他差异而言,不应该有任何差异。在大多数关系数据库管理系统下,这两个查询应该返回完全相同的结果并具有相同的性能。

正如@Tim Biegeleisen在评论中所说:

逗号版本已经在ANSI-92 SQL标准中废弃


2
逗号在1992年标准中并没有被弃用,也没有在任何最近的SQL标准版本中被弃用。 - ypercubeᵀᴹ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接