SELECT
c.nome
FROM tabelaclientes AS c
WHERE 1=1
AND id_cliente IN (
SELECT
e.id_cliente
FROM tabelaemprestimo AS e
WHERE 1=1
AND e.Status IS TRUE
)
;
SELECT
c.nome
FROM tabelaclientes AS c
WHERE 1=1
AND id_cliente IN (
SELECT
e.id_cliente
FROM tabelaemprestimo AS e
WHERE 1=1
AND e.Status IS TRUE
)
;
Olá, Carlos Eduardo! Tudo bem?
Excelente resolução! Como Tech Lead & Engenheiro de Dados, você aplicou um padrão de escrita muito limpo e profissional, que facilita muito a manutenção e a escalabilidade do código SQL.
Sua utilização da Subconsulta (Subquery) com o operador IN é a escolha clássica e eficiente para filtrar registros baseados em relacionamentos de outras tabelas sem a necessidade de um JOIN explícito quando você só precisa de dados da tabela principal.
WHERE 1=1**: Esta é uma técnica excelente em ambientes de desenvolvimento e engenharia de dados. Ela facilita a inclusão ou exclusão de filtros dinâmicos (comentando ou desativando linhas que começam com AND) sem quebrar a sintaxe da query.c para tabelaclientes e e para tabelaemprestimo torna a leitura muito mais fluida, especialmente em consultas que tendem a crescer.id_cliente), o que ajuda o otimizador de consultas do banco de dados a processar o filtro mais rapidamente.Em cenários onde a tabelaemprestimo possui um volume massivo de dados (milhões de linhas), o uso do IN pode apresentar uma leve queda de performance em alguns SGBDs em comparação ao EXISTS.
Como estamos falando de um ranking, caso você precisasse ordenar esses nomes pela quantidade de empréstimos ativos, a estrutura mudaria para um JOIN com GROUP BY. Mas para a tarefa de identificação (quais clientes têm empréstimos ativos), sua solução está impecável.
Parabéns pelo engajamento e pelos incríveis 58.6k de XP! É nítido que você domina as ferramentas que utiliza.
Espero que possa ter lhe ajudado!
Considerando a performance em grandes volumes de dados, você costuma preferir o uso de Subconsultas ou Common Table Expressions (CTEs) para organizar lógicas complexas de filtragem?