哪种连接语法更好?

时间:2012-06-28 19:41:51

标签: sql-server tsql join informix ansi

因此我们正在从Informix迁移到Sql Server。我注意到在Informix中,查询是以这种方式编写的:

select [col1],[col2],[col3],[col4],[col5]
from tableA, tableB
where tableA.[col1] = table.[gustavs_custom_chrome_id]

我在SQL Server中编写的所有查询都写成:

select [col1],[col2],[col3],[col4],[col5]
from tableA 
inner join tableB on tableA.[col1] = table.[gustavs_custom_chrome_id]

现在,我的第一个想法是:第一个查询很糟糕。它可能会创建这个巨大的记录集然后使用Where子句与实际记录集相关联。因此,它对性能不利。而且它是非ansi。所以这是双坏的。

然而,经过一些谷歌搜索,似乎它们在理论上几乎是一样的。它们都符合ANSI标准。

所以我的问题是:

  1. 两个查询都执行相同的操作吗? IE浏览器。跑得一样快,总能给出相同的答案。
  2. 两者是否真的符合ANSI标准?
  3. 为什么我要推出一种风格而不是另一种风格,有什么明显的理由吗?或者我应该留下足够好的一个人?


    注意:这些只是查询的示例。我已经看到一些查询(第一类)一次最多连接5个表。

1 个答案:

答案 0 :(得分:17)

嗯,“更好”是主观的。这里有一些风格。但我会直接解决你的问题。

  1. 两者都执行相同的
  2. 两者都符合ANSI标准。
  3. 第一个例子的问题是

    • 很容易无意中推导出交叉产品(因为它更容易省略加入标准)

    • 在向连接添加越来越多的表时,调整连接条件也变得很困难

    • 由于旧式外连接(* =)语法已被弃用(it has long been documented to return incorrect results),当您需要引入外连接时,需要混合新样式和旧样式连接...为什么要促进不一致?

    • 虽然它不是最佳做法的权威,Microsoft recommends explicit INNER/OUTER JOIN syntax

    • 采用后一种方法:

      • 无论内/外
      • ,您都使用一致的连接语法
      • 意外地衍生出十字产品更加困难(并非不可能)
      • 将连接条件与过滤条件隔离可以使调试更容易
  4. 我写了the post Kevin pointed to