SQL连接:SQL ANSI标准的未来(vs加入)?

atr*_*lla 8 sql sql-server join ansi-sql sql-server-2008

我们正在开发ETL工作,我们的顾问在连接表时一直使用"旧式"SQL

select a.attr1, b.attr1
from table1 a, table2 b
where a.attr2 = b.attr2
Run Code Online (Sandbox Code Playgroud)

而不是使用内部连接子句

select a.attr1, b.attr1
from table1 as a inner join table2 as b
   on a.attr2 = b.attr2
Run Code Online (Sandbox Code Playgroud)

我的问题是,从长远来看,是否有使用旧"加入"的风险?这种连接支持多长时间并保持为ANSI标准?我们的平台是SQL Server,我的主要原因是将来不再支持这些"where join".发生这种情况时,我们必须使用"内连接"连接方式修改所有ETL作业.

Red*_*ter 8

为什么不担心你现在面临的风险,而不是担心未来可能存在的风险?

除了马克的观点:

  • 当ON子句与连接表断开连接(有时是多行)时,代码更难以阅读(从而理解其目的).这增加了修改代码时出错的可能性.
  • 确定正在进行什么类型的JOIN更难 - 您必须浏览WHERE子句并希望您所看到的是正确的.
  • 找到缺少的JOIN子句要困难得多,增加了无意中笛卡尔连接的风险 - 当你使用ANSI语法时,ON子句很好地排列,使得这很简单.


Ste*_*ger 7

我怀疑"哪里加入"将不受支持.它不可能不支持它们,因为它们基于笛卡尔积和简单的过滤.它们实际上不是连接.

但是使用较新的连接语法有很多原因.其中:

  • 可读性
  • 可维护性
  • 更容易更改外连接