Oi, Rubens! Como vai?
Ótima observação! A consulta original da atividade usa JOIN para trazer os clientes com empréstimos acima da média:
SELECT
Nome,
Valor
FROM TabelaClientes
JOIN TabelaEmprestimo ON TabelaClientes.id_cliente = TabelaEmprestimo.id_cliente
WHERE Valor > (SELECT AVG(Valor) FROM TabelaEmprestimo);
A sua sugestão utilizando WHERE EXISTS é uma abordagem interessante, pois evita o retorno de valores duplicados quando há múltiplos empréstimos por cliente e pode melhorar a performance em certos bancos de dados.
Veja a diferença entre as abordagens:
-- Usando JOIN (consulta original da atividade)
SELECT
Nome,
Valor
FROM TabelaClientes c
JOIN TabelaEmprestimo e ON c.id_cliente = e.id_cliente
WHERE e.Valor > (SELECT AVG(Valor) FROM TabelaEmprestimo);
-- Usando WHERE EXISTS (sua sugestão)
SELECT Nome
FROM TabelaClientes c
WHERE EXISTS (
SELECT 1
FROM TabelaEmprestimo e
WHERE e.id_cliente = c.id_cliente
AND e.Valor > (SELECT AVG(Valor) FROM TabelaEmprestimo)
);
A principal diferença entre elas é que:
- A versão com JOIN retorna o nome do cliente e o valor do empréstimo que está acima da média.
- A versão com WHERE EXISTS apenas verifica se o cliente possui ao menos um empréstimo acima da média, retornando somente os nomes.
Caso o objetivo seja listar os valores dos empréstimos acima da média, o uso de JOIN faz mais sentido.Por outro lado, se o foco for apenas verificar quais clientes possuem ao menos um empréstimo acima da média, WHERE EXISTS é uma alternativa mais enxuta.
Parabéns pela iniciativa de pensar em uma solução alternativa e compartilhar com os outros estudantes! Explorar diferentes abordagens é uma ótima maneira de aprofundar seu conhecimento em SQL.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado