Considere a seguinte consulta SQL:select distinct nome_clien...
select distinct nome_cliente
from devedor
where nome_cliente in (select nome_cliente
Fromdepositante);
Sobre ela, é correto afirmar que:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - há uma subconsulta aninhada.
Vamos entender o conceito aplicado nesta questão. Uma subconsulta, também conhecida como subquery ou consulta aninhada, ocorre quando temos uma consulta dentro de outra. No SQL, isso é comum quando queremos comparar resultados de uma tabela com resultados de outra, ou mesmo realizar filtragens mais complexas. A subconsulta é executada primeiro e o seu resultado é utilizado pela consulta externa, que é a principal.
No exemplo dado na questão, a consulta interna select nome_cliente From depositante
irá selecionar todos os nomes de clientes da tabela depositante. Já a consulta externa faz uso do operador IN
para verificar quais nome_cliente da tabela devedor estão presentes no resultado da subconsulta. O uso do distinct
na consulta externa ajuda a garantir que cada nome de cliente seja listado uma única vez, evitando duplicatas.
O motivo pelo qual a Alternativa A é a correta é que a consulta apresentada claramente possui uma consulta dentro de outra, ou seja, uma subconsulta. A subconsulta está entre parênteses e é usada como parte da cláusula WHERE
na consulta principal.
Com relação às outras opções:
- A Alternativa B está incorreta porque o
distinct
irá, de fato, retornar nomes distintos, mas a questão afirma como sendo um número total, o que pode ser confuso, pois o número total pode ser interpretado como a contagem de todos os registros, sem a aplicação dodistinct
. - A Alternativa C está incorreta porque o SQL não faz um teste automático para exclusão de valores nulos em uma cláusula
IN
. Se a subconsulta retornar valores nulos, eles serão considerados na consulta principal. - A Alternativa D está incorreta porque não há erro de sintaxe na utilização do operador
IN
. Ele está sendo usado corretamente para comparar valores de duas tabelas. - A Alternativa E está incorreta porque não há uso de funções de agrupamento na consulta. Funções como
SUM()
,MAX()
,MIN()
,AVG()
, eCOUNT()
são exemplos de funções de agrupamento, e nenhuma delas aparece na consulta em questão.
Espero que essa explicação tenha ajudado a esclarecer o tema e a entender por que a alternativa A é a resposta correta para a questão. Continue estudando e qualquer dúvida, estou à disposição!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A resposta correta é:
A
há uma subconsulta aninhada.
A consulta SQL apresentada contém uma subconsulta aninhada, que é a parte da consulta entre parênteses após o operador "in". A subconsulta "select nome_cliente from depositante" é executada primeiro e retorna uma lista de nomes de clientes da tabela "depositante", que é usada como critério na cláusula "where" da consulta principal para filtrar os registros da tabela "devedor" que possuem nomes de clientes presentes na lista retornada pela subconsulta.
As demais afirmativas estão incorretas:
B
A instrução "distinct" retorna apenas os valores únicos dos nomes de clientes encontrados na tabela "devedor".
C
Não há evidências de que seja realizado um teste automático para exclusão de valores nulos na consulta.
D
Não há erro de sintaxe na consulta apresentada.
E
Não há utilização de função de agrupamento na consulta apresentada.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo