Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Avança SP 2025

Banco de DadosSQL
Código
qg425168
Banca
Avança SP
Órgão
UNITAU
Ano
2025
Nível
Superior
Cargo
Programador Pleno
Em SQL, qual comando é utilizado para recuperar registros duplicados em uma tabela?
  1. ADISTINCT
  2. BGROUP BY
  3. CHAVING COUNT(*) > 1
  4. DINNER JOIN
  5. EEXISTS
Revelar gabarito e comentário

GabaritoC — HAVING COUNT(*) > 1

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”.

SQL: recuperando registros duplicados

Gabarito: letra C. Para recuperar registros duplicados, é preciso agrupar os dados e filtrar os grupos que tenham mais de uma ocorrência — exatamente o que faz a combinação GROUP BY com HAVING COUNT(*) > 1. O DISTINCT faz o oposto (elimina duplicatas), e os demais comandos não têm essa finalidade.

A pergunta é sobre uma operação comum em bancos de dados: identificar linhas que se repetem em uma tabela. Em SQL, não existe um comando único que "retorne duplicados" — a técnica padrão é usar uma função de agregação (COUNT) em conjunto com o agrupamento (GROUP BY) e um filtro sobre os grupos (HAVING).

Vamos entender cada peça:

  • GROUP BY: agrupa linhas que têm valores iguais nas colunas especificadas. Por exemplo, GROUP BY nome junta todas as linhas com o mesmo nome em um único grupo.

  • COUNT(*): conta quantas linhas existem em cada grupo. Se um grupo tem COUNT(*) > 1, significa que há mais de uma linha com aquele valor — ou seja, há duplicatas.

  • HAVING: filtra os grupos após a agregação. Diferente do WHERE, que filtra linhas individuais antes do agrupamento, o HAVING só pode ser usado com GROUP BY e permite condições sobre funções de agregação.

A consulta completa ficaria assim:

SELECT coluna, COUNT(*) AS quantidade
FROM tabela
GROUP BY coluna
HAVING COUNT(*) > 1;

Esse comando retorna as colunas que aparecem mais de uma vez, junto com a contagem de ocorrências. É a forma mais direta e amplamente aceita de "recuperar registros duplicados".

A pegadinha da questão está em confundir DISTINCT com a recuperação de duplicados. O DISTINCT é usado para eliminar duplicatas do resultado, retornando apenas valores únicos — o oposto do que se pede. Já o GROUP BY sozinho também agrupa e, na prática, elimina duplicatas do resultado (como visto no material de apoio), mas não as identifica. A combinação com HAVING COUNT(*) > 1 é que faz o trabalho de encontrar os registros repetidos.

Alternativa A — ❌ Incorreta

O DISTINCT elimina linhas duplicadas do resultado, retornando apenas valores únicos. É o oposto do que a questão pede: em vez de recuperar duplicados, ele os remove. Por exemplo, SELECT DISTINCT cidade FROM clientes retorna cada cidade uma única vez, mesmo que vários clientes morem nela.

Alternativa B — ❌ Incorreta

O GROUP BY agrupa linhas com valores iguais, mas sozinho não retorna os duplicados — ele apenas organiza os dados em grupos. Na prática, o resultado de um GROUP BY sem função de agregação acaba eliminando as duplicatas, pois cada grupo vira uma linha. Para identificar duplicados, é necessário combiná-lo com HAVING COUNT(*) > 1.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta é a combinação correta. O GROUP BY agrupa as linhas por valores iguais, e o HAVING COUNT(*) > 1 filtra apenas os grupos que têm mais de uma ocorrência. O resultado mostra exatamente os registros que estão duplicados na tabela. É a técnica padrão para essa finalidade em SQL.

Alternativa D — ❌ Incorreta

O INNER JOIN combina registros de duas ou mais tabelas com base em uma condição de igualdade entre colunas. Ele não tem relação com a identificação de duplicatas dentro de uma única tabela. Serve para relacionar dados entre tabelas, não para analisar repetições em uma mesma tabela.

Alternativa E — ❌ Incorreta

O EXISTS é um operador lógico usado em subconsultas para verificar se existe pelo menos um registro que atenda a uma condição. Ele retorna verdadeiro ou falso, mas não recupera registros duplicados. É usado, por exemplo, para testar se um cliente tem pedidos associados, não para encontrar repetições.

A regra de ouro: para eliminar duplicatas, use DISTINCT; para encontrar duplicatas, use GROUP BY + HAVING COUNT(*) > 1. Essa distinção é clássica em provas de SQL.

Gabarito: letra C

Link permanente: /questoes/qg425168