1
resposta

Diferenças entre NOT IN e DISTINCT

Queria saber se tem diferenças em fazer NOT IN ( ) e fazer DISTINCT ( ) .

Por exemplo, trazendo valores da tabela x num select com outra tabela y, podemos fazer um "where not in( select tabela y)" , pra que assim não haja valores repetidos entre elas. Mas isso poderia ser substituido por um SELECT DISTINCT no começo ? Tambem mostraria somente os valores distintos entre si, ou seja, não repetidos, correto?

1 resposta

Oi, Francisco! Tudo bem?

Peço desculpas por demorar a te responder.

As cláusulas NOT IN e DISTINCT realizam atividades diferentes em uma consulta e, por esse motivo, não podem ser substituídas uma pela outra.

O NOT IN tem como objetivo filtrar valores que não estão presentes em determinada tabela, subconsulta ou conjunto de informações. Partindo da ideia que você compartilhou, somente seriam apresentados os dados da tabela X que não fazem parte de Y.

Para uma melhor compreensão, observe o seguinte caso: imagine que uma livraria possui um banco de dados com a tabela LIVROS; cada livro contido nela possui um gênero, como romance, crônica e poema. Caso quiséssemos consultar somente os livros de romance, poderíamos executar o seguinte script:

SELECT * FROM LIVROS
WHERE GENERO NOT INT ('crônica', 'poema')

Com isso, quaisquer livros cujo gênero é crônica ou poema não seriam selecionados, dado que nós os excluímos através do filtro.

O DISTINCT, por outro lado, seleciona somente os registros distintos de uma tabela. Continuando com o exemplo da livraria, imagine agora que desejamos verificar todos os autores cujos livros estão presentes no estoque da loja. Para que isso seja possível, teremos que realizar a seguinte consulta:

SELECT DISTINCT AUTOR FROM LIVROS;

Como podem haver diferentes livros escritos pela mesma pessoa, faz-se necessário usar a cláusula DISTINCT, já que ela irá remover as repetições de autores, caso estas existam.

A partir disso, podemos concluir que NOT IN e DISTINCT não podem ser usados para resolver o mesmo problema. Francisco, espero ter ajudado. Se surgirem dúvidas após minha explicação ou durante os seus estudos, fico à disposição.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.