对于内部连接,差异只是语义上的差异。这两个查询应产生完全相同的查询计划和完全相同的结果。
但是,当您使用外部联接时,条件是否在
where子句或
onon子句上就很重要。
UPDATe liSET li.Description = im.DescriptionFROM tbSupplierLineItem liRIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCodeAND li.ProcessedDate >= ConVERT(DATE,GETDATE())
不同于
UPDATe liSET li.Description = im.DescriptionFROM tbSupplierLineItem liRIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode WHERe li.ProcessedDate >= ConVERT(DATE,GETDATE())
不仅在语义层面上。
虽然第一个查询将返回右连接的预期结果,但第二个查询实际上将返回内部连接的预期结果。
这是因为如果您在左表上有不匹配的记录,那么右表的值可能为null,并且由于将任何值与null(包括另一个null)进行比较都会导致结果为false,因此基本上是将右连接更改为内部联接。



