Questão nº 55
Questão de Tecnologia da Informação · CESGRANRIO BB 01/2022 (nº 55)
O banco de dados de uma empresa que comercializa seguros pessoais possui as seguintes tabelas:
Pessoa (email, nome, unidadeFederativaNascimento, faixaEtaria)
UF (sigla, nome)
Faixa (nome, menorIdade, maiorIdade)
A coluna "unidadeFederativaNascimento" da tabela Pessoa é uma chave estrangeira que referencia a coluna "sigla" da tabela UF; a coluna "faixaEtaria" da tabela Pessoa é uma chave estrangeira que aponta para a coluna "nome" da tabela Faixa.
A tabela Faixa possui os seguintes dados:

Considere o seguinte comando:
SELECT COUNT(*)
FROM Pessoa P, Faixa F
WHERE P.faixaEtaria = F.nome
AND P.unidadeFederativaNascimento = 'RJ'
AND F.maiorIdade <= 19
Esse comando SQL
- Aapresenta quantas são as pessoas que estão na tabela Pessoa, que são jovens e que nasceram no estado do Rio de Janeiro. (alternativa correta)
- Bapresenta o nome e o email de jovens nascidos no Rio de Janeiro.
- Cagrupa pessoas por faixa etária e mostra quantos são os grupos com pessoas nascidas no Rio de Janeiro.
- Drealiza uma operação equivalente à união de dois outros comandos SQL.
- Eagrupa pessoas por UF e mostra quantos são os grupos com jovens.
Resposta comentada
Gabarito Alternativa A
Conceito-chave: A consulta faz um JOIN implícito (vírgula) entre as tabelas Pessoa e Faixa, ligando-as pela chave estrangeira faixaEtaria = nome. Depois, filtra apenas pessoas do RJ (unidadeFederativaNascimento = 'RJ') e faixas cujo limite superior (maiorIdade) seja até 19 anos. O COUNT(*) conta quantas linhas resultam dessa combinação, ou seja, quantas pessoas do RJ pertencem a alguma faixa etária com maiorIdade <= 19 (jovens).
- (A) Correta: O comando conta quantas pessoas da tabela
Pessoanasceram no RJ e estão em uma faixa etária cujomaiorIdadeé ≤ 19, ou seja, são jovens — exatamente o que a alternativa descreve. - (B) Incorreta: O comando retorna apenas um número (
COUNT(*)), não seleciona colunas comonomeouemail; portanto, não apresenta nome e email. - (C) Incorreta: Não há
GROUP BYno comando, então não há agrupamento por faixa etária; oCOUNT(*)conta linhas, não grupos. - (D) Incorreta: A consulta usa
JOIN(produto cartesiano filtrado) e não uma operação deUNIONentre comandos; são conceitos diferentes. - (E) Incorreta: Não há
GROUP BYpor UF; o filtro é apenas para'RJ', e oCOUNT(*)conta pessoas, não grupos.
Armadilha da banca (no distrator mais tentador, a letra A): A pegadinha está em achar que o COUNT(*) conta "pessoas" diretamente, mas o JOIN com Faixa pode gerar linhas duplicadas se uma pessoa se encaixar em mais de uma faixa com maiorIdade <= 19. No entanto, pelos dados da tabela Faixa (que não foram mostrados na imagem, mas o gabarito assume que há apenas uma faixa com maiorIdade <= 19, como "Jovem" com maiorIdade = 19), o COUNT(*) conta corretamente cada pessoa uma única vez. A banca quer que você perceba que o COUNT(*) conta linhas resultantes do JOIN, e não pessoas únicas — mas, nesse caso específico, como a faixa é única, o resultado é o número de pessoas jovens do RJ. Se houvesse duas faixas com maiorIdade <= 19, o COUNT(*) contaria a mesma pessoa duas vezes, e a alternativa A seria tecnicamente incorreta — mas o gabarito oficial valida A, então a interpretação é que a faixa é única.
Fonte: CESGRANRIO BB 01/2022 Escriturário - Agente de Tecnologia (Caderno Gabarito 1). Reproduzida para fins de estudo.