因此我们正在从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标准。
所以我的问题是:
答案 0 :(得分:17)
嗯,“更好”是主观的。这里有一些风格。但我会直接解决你的问题。
第一个例子的问题是
很容易无意中推导出交叉产品(因为它更容易省略加入标准)
在向连接添加越来越多的表时,调整连接条件也变得很困难
由于旧式外连接(* =)语法已被弃用(it has long been documented to return incorrect results),当您需要引入外连接时,需要混合新样式和旧样式连接...为什么要促进不一致?
虽然它不是最佳做法的权威,Microsoft recommends explicit INNER/OUTER JOIN syntax
采用后一种方法: