我正在将SQL Server 2000中运行的某些查询的语法更新为SQL Server2016。有问题的查询使用的语法非常旧(* =)。在运行旧代码和新代码之后,我具有相同的结果,相同的执行计划,但是我想知道我所做的“翻译”是否正确。
有人可以解释为什么不同的查询具有相同的执行计划吗?我看到了相反的情况,但这对我来说是新的。
我写的查询是否等同于旧查询?请不要专注于表名,而要关注表的正确联接。
这是我所拥有的:
Select
Count(*) As Cnt
From
FNFItemFat, FUnidade, FNCM, FSitTributaria,
FTipoIPI FK_FNFITEMFAT_FTIPOIPI1, FNotaFiscalFat NOTA1
Where
NOTA1.CodNFInsumos = fNFItemFat.CodNFInsumos
and FNFItemFat.CodNCM *= FNCM.CodNCM
and FNFItemFat.CodSitTrib = FSitTributaria.CodSitTrib
and FNFItemFat.CodUnidade = FUnidade.CodUnidade
and FNFItemFat.CodTipoIPI = FK_FNFITEMFAT_FTIPOIPI1.CodTipoIPI
这是我所做的:
Select
Count(*) As Cnt
From
FNFItemFat fNFItemFat
Inner Join
FNotaFiscalFat NOTA1 on NOTA1.CodNFInsumos = fNFItemFat.CodNFInsumos
Left Join
FNCM fNCM on fNCM.CodNCM = fNFItemFat.CodNCM
Inner Join
FSitTributaria fSitTributaria on fSitTributaria.CodSitTrib = fNFItemFat.CodSitTrib
Inner Join
FUnidade fUnidade on fUnidade.CodUnidade = fNFItemFat.CodUnidade
Inner Join
FTipoIPI FK_FNFITEMFAT_FTIPOIPI1 on FK_FNFITEMFAT_FTIPOIPI1.CodTipoIPI = fNFItemFat.CodTipoIPI