Realizei a atividade utilizando NOT IN ao invés de join, apesar de ter pensado nas duas resoluções. Nesse caso, qual solução é mais performática?
"SELECT nome FROM clientes WHERE id NOT IN (SELECT DISTINCT idcliente FROM pedidos);"
Realizei a atividade utilizando NOT IN ao invés de join, apesar de ter pensado nas duas resoluções. Nesse caso, qual solução é mais performática?
"SELECT nome FROM clientes WHERE id NOT IN (SELECT DISTINCT idcliente FROM pedidos);"
Olá, André! Como vai?
Ambas as abordagens, NOT IN
e RIGHT JOIN
, podem ser usadas para encontrar clientes sem pedidos, mas elas têm diferenças em termos de performance, especialmente em bancos de dados grandes.
A alternativa que seria mais performática é usar o RIGHT JOIN
combinado com IS NULL
. Dessa maneira:
SELECT c.nome
FROM Pedidos p
RIGHT JOIN clientes c
ON c.ID = p.IDcliente
WHERE p.IDcliente IS NULL;
Nesse caso, o RIGHT JOIN
cria uma combinação de todas as linhas da tabela clientes
com as linhas correspondentes da tabela pedidos
. O WHERE p.idcliente IS NULL
garante que você está selecionando apenas os clientes que não têm correspondência na tabela pedidos
, ou seja, aqueles que não fizeram pedidos.
A vantagem do RIGHT JOIN
é que ele pode ser mais eficiente, especialmente em bancos de dados grandes, porque evita a necessidade de calcular todos os valores antes de fazer a comparação.
Se quiser aprender mais sobre esse assunto, vou deixar abaixo uma aula especial sobre isso.
Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:
Fico à disposição! E se precisar, conte sempre com o apoio do fórum.
Abraço e bons estudos!