Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023

Banco de DadosConsultas 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.

  1. AO comando está incorreto, pois o DISTINCT exige a cláusula TOP.
  2. BO comando está incorreto, pois o DISTINCT deveria estar após o nome da coluna.
  3. CA consulta terá o mesmo resultado de “SELECT oficio FROM tb_cartorio GROUP BY oficio”.
  4. DCaso a tabela tb_cartorio possua valores duplicados na coluna oficio, a consulta apresentará erro.
  5. 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 💪

Gabarito: letra C

Link permanente: /questoes/vu195713