3
respostas

LEFT JOIN vs NOT IN

SELECT *
FROM TABELAA TA
LEFT JOIN TABELAB TB
ON TA.CODIGO = TB.CODIGO
WHERE TA.TIPO = TB.TIPO

Estava efetuando uma query, onde eu precisava descobrir quais elementos da tabela A não estavam na tabela B e que eles fossem identificados como NULL. Ilustrando uma consulta que eu fiz na base de dados do trabalho, eu não consegui obter resultado que eu esperava, somente era exibidos os itens coincidentes em ambas as tabelas.

Eu só consegui obter o resultado que eu esperava, quando eu utilizei

SELECT *
FROM TABELAA TA
WHERE TA.CODIGO NOT IN 
(
SELECT TB.CODIGO FROM TABELAB TB
)

O que eu posso ter feito de errado ? Lembrando que, embora as colunas possuam nomes diferentes, os registros possuem as mesmas propriedades.

Obrigado, Davi

3 respostas

Olá Davi, tudo bem?

A sua primeira query retornou todos os registros que correspondiam em ambas as tabelas, pelo fato de você ter utilizado a cláusula WHERE passando a condição de retornar apenas registros que correspondem em ambas as tabelas:

WHERE TA.TIPO = TB.TIPO

Remova a cláusula WHERE e execute a sua query dessa forma:

SELECT *
FROM TABELAA TA
LEFT JOIN TABELAB TB
ON TA.CODIGO = TB.CODIGO

Aguardo o seu retorno!

Boa noite, Danielle! Tudo bem e você ?

Deu certo, agora com a sua dica. Muito obrigado! Agora, consegui compreender o que eu estava fazendo errado.

Atte., Davi

Olá Davi, tudo bem também :).

Fico feliz em saber que você conseguiu compreender e resolver o problema na sua query.

Continue assim, qualquer nova dúvida é só falar e bons estudos!