Para responder à questão, considere a Figura 2 abaixo:
Figura 2 – Tabelas “Cargo” e “Funcionário”
Considerando a tabela “Cargo”, apresentada na Figura 2, quantas linhas serão retornadas pelo comando SQL abaixo?SELECT COUNT(*), NIVELFROM CARGOGROUP BY NIVELHAVING COUNT(*) > 1
A0
B1
C2
D3
E4
Revelar gabarito e comentário▾
GabaritoB — 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”.
Resolução
Gabarito: letra B — a conta chega a 1 linha — alternativa B.
A ideia por trás
Em SQL, agrupar linhas significa juntar todas as que têm o mesmo valor em uma coluna, formando grupos. A função COUNT(*) conta quantas linhas existem em cada grupo. A cláusula HAVING filtra esses grupos depois de formados, mantendo apenas os que satisfazem uma condição sobre a contagem.
A ordem lógica de execução é: FROM → WHERE → GROUP BY → funções de agregação → HAVING → SELECT. O WHERE filtra linhas individuais antes do agrupamento; o HAVING filtra grupos depois da agregação. COUNT(*) conta todas as linhas do grupo, inclusive com valores nulos.
Esta questão testa exatamente a diferença entre WHERE e HAVING: o HAVING age sobre os grupos, não sobre as linhas. O resultado é o número de grupos que têm mais de uma linha.
O que a questão dá
tabela Cargo com coluna NIVEL
comando SQL: SELECT COUNT(), NIVEL FROM CARGO GROUP BY NIVEL HAVING COUNT() > 1
O que queremos: quantas linhas o comando retorna
Passo 1 — Agrupar as linhas por NIVEL
O comando pede GROUP BY NIVEL, então o banco junta todas as linhas que têm o mesmo valor na coluna NIVEL. Cada grupo representa um valor distinto de NIVEL.
NÃO CAIA NESSA!
Esquecer que GROUP BY cria grupos e pensar que a consulta retorna uma linha por registro original.
Passo 2 — Contar quantas linhas tem cada grupo
A função COUNT(*) conta o número de linhas em cada grupo. Esse valor é usado no HAVING para decidir quais grupos ficam.
Por que esta fórmula: COUNT(*) é a função de agregação que conta todas as linhas do grupo, independentemente de valores nulos.
De onde vem cada valor: = todas as linhas de cada grupo formado no passo 1
NÃO CAIA NESSA!
Confundir COUNT(*) com COUNT(coluna), que ignora nulos.
Passo 3 — Filtrar os grupos com mais de uma linha
O HAVING COUNT(*) > 1 mantém apenas os grupos cuja contagem é maior que 1. Isso é feito depois do agrupamento, então não afeta linhas individuais.
Por que esta fórmula: HAVING é a cláusula que filtra grupos após a agregação, diferente de WHERE que filtra linhas antes.
De onde vem cada valor: = passo 2: contagem de linhas de cada grupo · = condição do enunciado: manter apenas grupos com mais de uma linha
NÃO CAIA NESSA!
Aplicar o filtro como WHERE, o que mudaria o resultado.
Passo 4 — Contar quantos grupos passaram no filtro
O SELECT retorna uma linha para cada grupo que passou no HAVING. O número de linhas do resultado é o número de grupos com contagem > 1.
NÃO CAIA NESSA!
Contar as linhas da tabela original em vez dos grupos filtrados.