Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023
Banco de Dados›Consultas e Comandos em SQL
Código
vu195713
Banca
VUNESP
Órgão
CM SJC
Ano
2023
Cargo
TLE ( )
Considere a seguinte consulta no Microsoft SQL Server: SELECT DISTINCT oficio FROM tb_cartorio
Assinale a alternativa correta sobre esse comando.
AO comando está incorreto, pois o DISTINCT exige a cláusula TOP.
BO comando está incorreto, pois o DISTINCT deveria estar após o nome da coluna.
CA consulta terá o mesmo resultado de “SELECT oficio FROM tb_cartorio GROUP BY oficio”.
DCaso a tabela tb_cartorio possua valores duplicados na coluna oficio, a consulta apresentará erro.
EO DISTINCT apresentará a contagem dos valores como resultado da consulta.
Revelar gabarito e comentário▾
GabaritoC — A consulta terá o mesmo resultado de “SELECT oficio FROM tb_cartorio GROUP BY oficio”.
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”.
Cláusula DISTINCT no SQL
Gabarito: letra C. A consulta SELECT DISTINCT oficio FROM tb_cartorio retorna os valores distintos da coluna oficio, eliminando duplicatas — exatamente o mesmo resultado de SELECT oficio FROM tb_cartorio GROUP BY oficio, pois o GROUP BY também agrupa os valores iguais, gerando uma linha por valor distinto. A sintaxe está correta: DISTINCT vem logo após SELECT e antes da lista de colunas.
A cláusula DISTINCT é um dos recursos mais cobrados em provas de SQL justamente porque parece simples, mas esconde armadilhas de sintaxe e de semântica. Vamos entender o que ela faz de verdade. Em uma tabela, é comum que uma coluna contenha valores repetidos — por exemplo, a coluna oficio de um cartório pode ter várias linhas com o valor "Tabelião" ou "Registrador". Quando você quer saber apenas quais ofícios existem, sem repetições, usa-se SELECT DISTINCT. O comando elimina as linhas duplicadas do resultado, retornando apenas valores únicos.
A sintaxe correta é SELECT DISTINCT coluna1, coluna2, ... FROM tabela. O DISTINCT é um modificador do SELECT, e por isso deve vir imediatamente após a palavra-chave SELECT e antes das colunas. Ele não exige TOP, não vem depois do nome da coluna, e não faz contagem — ele apenas filtra duplicatas. É importante notar que DISTINCT se aplica a todas as colunas listadas no SELECT: se você escrever SELECT DISTINCT col1, col2, a combinação das duas colunas é que deve ser única.
A relação entre DISTINCT e GROUP BY é um ponto clássico de confusão. Quando você escreve SELECT oficio FROM tb_cartorio GROUP BY oficio, o banco agrupa todas as linhas que têm o mesmo valor de oficio e retorna uma linha por grupo — ou seja, uma linha por valor distinto. O resultado é idêntico ao de SELECT DISTINCT oficio FROM tb_cartorio. A diferença prática é que GROUP BY é mais poderoso: ele permite usar funções de agregação como COUNT, SUM, AVG junto com os grupos, o que DISTINCT não faz. Mas, para simplesmente listar valores únicos, os dois são equivalentes.
A pegadinha que a banca explora aqui é justamente essa equivalência. O candidato que decora a sintaxe sem entender o conceito pode achar que GROUP BY e DISTINCT são coisas totalmente diferentes, quando na verdade, para este caso, produzem o mesmo resultado. Além disso, há a tentação de marcar alternativas que falam em "erro de sintaxe" ou "contagem", que são distratores clássicos. Guarde a regra de ouro: DISTINCT elimina duplicatas; GROUP BY agrupa linhas iguais — e, sem funções de agregação, ambos devolvem valores únicos.
Comando
Função
Resultado
SELECT DISTINCT oficio FROM tb_cartorio
Elimina duplicatas da coluna oficio
Valores únicos da coluna
SELECT oficio FROM tb_cartorio GROUP BY oficio
Agrupa linhas por valor de oficio
Uma linha por valor distinto (sem agregação)
Alternativa A — ❌ Incorreta
Afirma que o comando está incorreto porque DISTINCT exige a cláusula TOP. Isso é falso: DISTINCT é independente de TOP. A cláusula TOP é usada para limitar o número de linhas retornadas (ex.: SELECT TOP 10 ...), enquanto DISTINCT elimina duplicatas. São funcionalidades distintas e não há qualquer exigência de uma pela outra. O comando SELECT DISTINCT oficio FROM tb_cartorio é perfeitamente válido sem TOP.
Alternativa B — ❌ Incorreta
Afirma que o DISTINCT deveria estar após o nome da coluna. Isso está errado: a sintaxe correta é SELECT DISTINCT coluna FROM tabela, com o DISTINCT logo após o SELECT e antes da lista de colunas. Colocá-lo depois do nome da coluna (ex.: SELECT oficio DISTINCT FROM ...) geraria erro de sintaxe. A posição do DISTINCT é fixa na gramática do SQL.
Alternativa C — ✅ Correta ⟵ GABARITO
A consulta terá o mesmo resultado de SELECT oficio FROM tb_cartorio GROUP BY oficio. Isso é verdade: DISTINCT retorna valores únicos da coluna, e GROUP BY oficio agrupa as linhas por valor de oficio, retornando uma linha por grupo — ou seja, uma linha por valor distinto. Ambos eliminam duplicatas e produzem o mesmo conjunto de resultados. A diferença é que GROUP BY permite o uso de funções de agregação, mas, sem elas, o resultado é idêntico.
Alternativa D — ❌ Incorreta
Afirma que, se a tabela possuir valores duplicados na coluna oficio, a consulta apresentará erro. Isso é o oposto do que acontece: o DISTINCT existe justamente para lidar com valores duplicados, eliminando-os do resultado. Se houver duplicatas, a consulta funciona normalmente e retorna apenas os valores distintos. Não há erro algum — a presença de duplicatas é o cenário típico em que o DISTINCT é útil.
Alternativa E — ❌ Incorreta
Afirma que o DISTINCT apresentará a contagem dos valores como resultado. Isso confunde DISTINCT com a função de agregação COUNT. O DISTINCT não conta nada; ele apenas filtra duplicatas e retorna os valores únicos. Para contar valores distintos, seria necessário usar SELECT COUNT(DISTINCT oficio) FROM tb_cartorio. A alternativa descreve o comportamento de COUNT, não de DISTINCT.
NÃO CAIA NESSA!
A banca tenta fazer o candidato confundir DISTINCT com COUNT (alternativa E) e com erro de sintaxe (alternativas A e B). A armadilha central, porém, é a equivalência com GROUP BY: muitos candidatos acham que são coisas totalmente diferentes, quando, sem funções de agregação, produzem o mesmo resultado. Lembre-se: DISTINCT elimina duplicatas; GROUP BY agrupa linhas iguais — e, sem agregação, ambos devolvem valores únicos. Com treino, você enxerga essas trocas de longe 💪