哪种连接语法更好?

dot*_*00b 4 t-sql sql-server informix join ansi

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

select [col1],[col2],[col3],[col4],[col5]
from tableA, tableB
where tableA.[col1] = table.[gustavs_custom_chrome_id]
Run Code Online (Sandbox Code Playgroud)

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

select [col1],[col2],[col3],[col4],[col5]
from tableA 
inner join tableB on tableA.[col1] = table.[gustavs_custom_chrome_id]
Run Code Online (Sandbox Code Playgroud)

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

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

所以我的问题是:

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


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

Aar*_*and 17

那么,"更好"是主观的.这里有一些风格.但我会直接解决你的问题.

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

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

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

    • 由于旧式外连接(*=)语法已被弃用(长期以来已记录为返回不正确的结果),当需要引入外连接时,需要混合新样式和旧样式连接...为什么要提升不一致?

    • 虽然它不是最佳实践的权威,但Microsoft建议使用显式的INNER/OUTER JOIN语法

    • 用后一种方法:

      • 无论内部/外部如何,您都使用一致的连接语法
      • 意外地衍生出十字产品更加困难(并非不可能)
      • 将连接条件与过滤条件隔离可以使调试更容易

我写了凯文指出的帖子.

  • AARGH!你是对的,@ AndriyM; 是Sybase/SQL Server使用`*=`而Oracle使用`(+)`和Informix使用OUTER(与SQL标准完全不同),并且......在有标准之前,每个人都自己做了不同的非标准方式. (2认同)