En büyük fark birleşme içinde değil, var olmadığıdır (olduğu gibi) SELECT *.
İlk örnekte, sen tüm sütunları almak hem A ve Bikinci örnekte, sadece sütunları olsun oysa A.
SQL Server'da, ikinci değişken çok basit bir bağlamda verilen örnekte biraz daha hızlıdır:
İki örnek tablo oluşturun:
CREATE TABLE dbo.A
(
A_ID INT NOT NULL
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
);
CREATE TABLE dbo.B
(
B_ID INT NOT NULL
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
);
GO
Her tabloya 10.000 satır ekleyin:
INSERT INTO dbo.A DEFAULT VALUES;
GO 10000
INSERT INTO dbo.B DEFAULT VALUES;
GO 10000
Her 5. sırayı ikinci tablodan çıkarın:
DELETE
FROM dbo.B
WHERE B_ID % 5 = 1;
SELECT COUNT(*) -- shows 10,000
FROM dbo.A;
SELECT COUNT(*) -- shows 8,000
FROM dbo.B;
İki test SELECTifadesi değişkenini gerçekleştirin:
SELECT *
FROM dbo.A
LEFT JOIN dbo.B ON A.A_ID = B.B_ID
WHERE B.B_ID IS NULL;
SELECT *
FROM dbo.A
WHERE NOT EXISTS (SELECT 1
FROM dbo.B
WHERE b.B_ID = a.A_ID);
İcra planları:

İkinci varyantın sol anti-yarı birleştirme operatörünü kullanabilmesi nedeniyle filtre işlemini gerçekleştirmesi gerekmez.
WHERE A.idx NOT IN (...)olduğunu değil aynı dolayı üç değerlikli davranışınaNULL(yaniNULLeşit değildirNULLSahip nedenle eğer) (ne de eşitsiz herhangiNULLiçindetableBsize beklenmedik sonuçlar alırsınız!)