Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mão na massa: encontrando clientes sem 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);"

1 resposta
solução!

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.

Ícone de sugestão Para saber mais:

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!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!