A
LEFT ANTI SEMI JOIN
é um tipo de junção que retorna apenas as linhas distintas no conjunto de linhas da esquerda que não têm nenhuma linha correspondente no conjunto de linhas da direita. Mas ao usar o T-SQL no SQL Server, se você tentar usar explicitamente
LEFT ANTI SEMI JOIN
em sua consulta, você provavelmente receberá o seguinte erro:Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
Felizmente, o SQL Server inclui o
EXCEPT
operador, que nos permite realizar um LEFT ANTI SEMI JOIN
. Quando você usa o
EXCEPT
operador, ele aparece no plano de execução da consulta como um LEFT ANTI SEMI JOIN
. Você também pode construir uma subconsulta que faça a mesma coisa.
Exemplo
Imagine que temos duas tabelas;
Cats
e Dogs
, e então executamos a seguinte consulta:SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Esta consulta usa o
EXCEPT
operador, e aparecerá como um LEFT ANTI SEMI JOIN
no plano de execução. É semelhante a fazer o seguinte:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Aqui está o plano de execução para essa consulta:
Se você usa U-SQL com Azure Data Lake Analytics, pode usar o
ANTISEMIJOIN
cláusula para fazer anti semijunções à direita e à esquerda. Ou seja, você pode usar LEFT ANTISEMIJOIN
ou RIGHT ANTISEMIJOIN
.