inner join UnidadeServico US on U.uni_id = US.uni_id
inner join Servico S on US.ser_id = S.ser_id
group by uni_descricao)
servicos
order by servicos desc
limit 3
Qual alternativa está correta ao executar essa expressão SQL?
ALista os três primeiros registros de Unidade que possuem mais registros de Servico por meio da entidade associativa UnidadeServico.
BApresenta os três primeiros registros de Unidade que possuem mais registros associados em UnidadeServico por meio da entidade associativa Servico.
CLista os três primeiros registros de Unidade que possuem menos registros associados em Servico por meio da entidade associativa UnidadeServico.
DApresenta os três primeiros registros de Unidade que possuem menos registros associados em UnidadeServico por meio da entidade associativa Servico.
EA expressão SQL apresenta erro de sintaxe.
Revelar gabarito e comentário▾
GabaritoA — Lista os três primeiros registros de Unidade que possuem mais registros de Servico por meio da entidade associativa UnidadeServico.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Consulta SQL com Agregação e Ordenação
Gabarito: letra A. A consulta conta, para cada Unidade, quantos serviços estão associados a ela por meio da entidade associativa UnidadeServico, ordena o resultado em ordem decrescente pela contagem e limita a saída aos três primeiros registros — ou seja, lista as três Unidades com mais serviços associados. A alternativa A descreve exatamente esse comportamento.
A consulta SQL apresentada é um exemplo clássico de agregação com GROUP BY, ordenação com ORDER BY e limitação de resultados com LIMIT. Vamos decompor cada parte para entender o que ela faz:
Subconsulta (derived table): A parte interna (select uni_descricao unidade, count(US.ser_id) servicos from Unidade U inner join UnidadeServico US on U.uni_id = US.uni_id inner join Servico S on US.ser_id = S.ser_id group by uni_descricao) cria uma tabela temporária com duas colunas: unidade (a descrição da unidade) e servicos (a contagem de serviços associados àquela unidade). O GROUP BY uni_descricao agrupa os registros por unidade, e o COUNT(US.ser_id) conta quantos registros de UnidadeServico existem para cada grupo — ou seja, quantos serviços estão vinculados àquela unidade.
Junções (JOINs): A consulta faz INNER JOIN entre Unidade e UnidadeServico pela chave uni_id, e depois com Servico pela chave ser_id. Isso garante que apenas as unidades que possuem pelo menos um serviço associado sejam consideradas (o INNER JOIN exclui unidades sem associação). A entidade associativa UnidadeServico é o elo entre Unidade e Servico, representando um relacionamento muitos-para-muitos (N:N) entre essas entidades.
Ordenação e limitação: A consulta externa select unidade, servicos from (...) servicos order by servicos desc limit 3 seleciona as duas colunas da subconsulta, ordena pela coluna servicos em ordem decrescente (desc) e limita o resultado a 3 linhas (limit 3). Portanto, o resultado final são as três unidades com o maior número de serviços associados.
A alternativa A é a única que descreve corretamente esse fluxo: "Lista os três primeiros registros de Unidade que possuem mais registros de Servico por meio da entidade associativa UnidadeServico." As demais alternativas contêm erros conceituais ou de direção (mais/menos) ou trocam os papéis das entidades.
Critério
Alternativa A (correta)
Alternativa B
Alternativa C
Alternativa D
Entidade associativa citada
UnidadeServico ✅
Servico ❌
UnidadeServico ✅
Servico ❌
Direção da ordenação
Mais (DESC) ✅
Mais (DESC) ✅
Menos ❌
Menos ❌
O que é contado
Serviços por unidade ✅
Registros em UnidadeServico (equivale, mas descrição imprecisa)
Serviços por unidade ✅
Registros em UnidadeServico ❌
Resultado final
3 unidades com mais serviços ✅
3 unidades com mais serviços (mas descrição errada da associação)
3 unidades com menos serviços ❌
3 unidades com menos serviços ❌
Alternativa A — ✅ Correta ⟵ GABARITO
A alternativa A está correta porque descreve exatamente o que a consulta faz: conta os serviços por unidade (via UnidadeServico), ordena do maior para o menor e limita a 3 resultados. O termo "mais registros de Servico" refere-se ao COUNT(US.ser_id), que conta quantos serviços estão associados a cada unidade. A expressão "por meio da entidade associativa UnidadeServico" está correta, pois é essa tabela que faz a ligação entre Unidade e Servico.
Alternativa B — ❌ Incorreta
A alternativa B diz que a consulta apresenta "os três primeiros registros de Unidade que possuem mais registros associados em UnidadeServico por meio da entidade associativa Servico". O erro está na última parte: "por meio da entidade associativa Servico". A entidade associativa é UnidadeServico, não Servico. Servico é uma entidade comum, não associativa. Além disso, a contagem é de serviços (COUNT(US.ser_id)), não de registros em UnidadeServico diretamente — embora, na prática, contar US.ser_id seja equivalente a contar registros de UnidadeServico (já que cada registro associa um serviço a uma unidade), a descrição "por meio da entidade associativa Servico" é tecnicamente incorreta.
Alternativa C — ❌ Incorreta
A alternativa C afirma que a consulta lista as unidades com "menos registros associados em Servico". O erro está na direção: a consulta usa order by servicos desc, ou seja, ordena em ordem decrescente, trazendo as unidades com mais serviços, não com menos. Além disso, a expressão "menos registros associados em Servico" é ambígua, mas o ponto central é a inversão da ordem.
Alternativa D — ❌ Incorreta
A alternativa D combina dois erros: diz que a consulta apresenta as unidades com "menos registros associados em UnidadeServico" (inversão da ordem, pois é desc) e novamente erra ao dizer "por meio da entidade associativa Servico" (o correto é UnidadeServico). Portanto, está duplamente incorreta.
Alternativa E — ❌ Incorreta
A alternativa E afirma que a expressão SQL apresenta erro de sintaxe. Isso é falso: a consulta é sintaticamente válida. A subconsulta tem GROUP BY, as junções estão corretas, e a consulta externa referencia a subconsulta com um alias (servicos). O ORDER BY e o LIMIT são cláusulas válidas. Não há erro de sintaxe.
NÃO CAIA NESSA!
A banca explora a confusão entre as entidades Servico e UnidadeServico. A entidade associativa é UnidadeServico, que representa o relacionamento N:N entre Unidade e Servico. As alternativas B e D trocam os papéis, dizendo que a associação é "por meio de Servico". Além disso, as alternativas C e D invertem a ordem (menos em vez de mais), testando se o candidato percebe o ORDER BY ... DESC. Fique atento a esses dois detalhes: quem é a entidade associativa e qual é a direção da ordenação.
PEGA ESSA DICA!
Para resolver questões de SQL que envolvem agregação, siga este roteiro: (1) identifique as tabelas e os JOINs; (2) veja o que está sendo contado (COUNT) e como o GROUP BY agrupa; (3) verifique a ordem (ASC/DESC) e o limite (LIMIT). Aqui, o COUNT(US.ser_id) conta serviços por unidade, e o ORDER BY servicos DESC traz os maiores primeiro. Se a alternativa falar em "menos", desconfie imediatamente.