Pular para o conteúdo principal

Questão de Banco de Dados — Geral — FUNDATEC 2026

Banco de DadosGeral
Código
qa433476
Banca
FUNDATEC
Órgão
IFC
Ano
2026
Cargo
PEBTT ( )

Analise as seguintes tabelas de um banco de dados relacional:

 

Tabela FABRICANTE

 

Imagem associada para resolução da questão

 

Tabela EQUIPAMENTO

 

Imagem associada para resolução da questão

 

Considere a seguinte consulta SQL:

 

SELECT f.nome, SUM(e.preco) AS total
FROM FABRICANTE f
JOIN EQUIPAMENTO e ON f.id_fabricante = e.id_fabricante
WHERE e.preco >= 70
GROUP BY f.nome
HAVING SUM(e.preco) > 150;

 

Qual será o resultado produzido pela consulta?

  1. AAlpha – 300 Beta – 120 Gamma – 300
  2. BAlpha – 300 Gamma – 300
  3. CAlpha – 200 Beta – 70 Gamma – 300
  4. DGamma – 300
  5. EAlpha – 300
Revelar gabarito e comentário

GabaritoB — Alpha – 300 Gamma – 300

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

Consulta SQL com JOIN, GROUP BY e HAVING

Gabarito: letra B — a consulta retorna apenas os fabricantes cuja soma dos preços dos equipamentos (com preço >= 70) seja maior que 150, resultando em Alpha – 300 e Gamma – 300. A chave está na ordem de execução: o WHERE filtra as linhas antes da agregação, e o HAVING filtra os grupos depois da agregação.

A ideia por trás

A consulta combina duas tabelas, FABRICANTE e EQUIPAMENTO, através de um JOIN na coluna id_fabricante. O JOIN (junção interna) combina cada linha da tabela FABRICANTE com as linhas correspondentes da tabela EQUIPAMENTO que possuem o mesmo id_fabricante. O resultado é uma tabela virtual com todas as colunas das duas tabelas, onde cada linha representa um equipamento e o seu respectivo fabricante.

Em seguida, o WHERE e.preco >= 70 filtra as linhas, mantendo apenas os equipamentos com preço maior ou igual a 70. É importante notar que esse filtro é aplicado antes da agregação, ou seja, ele remove linhas individuais da tabela virtual, e não grupos inteiros.

Depois, o GROUP BY f.nome agrupa as linhas restantes pelo nome do fabricante. Para cada grupo, a função de agregação SUM(e.preco) calcula a soma dos preços dos equipamentos daquele fabricante que passaram pelo filtro do WHERE.

Por fim, o HAVING SUM(e.preco) > 150 filtra os grupos, mantendo apenas aqueles cuja soma dos preços seja maior que 150. O HAVING é aplicado depois da agregação, ou seja, ele filtra os grupos formados pelo GROUP BY.

A pegadinha da banca

A banca explora a confusão entre WHERE e HAVING. O WHERE filtra linhas individuais antes da agregação, enquanto o HAVING filtra grupos depois da agregação. Se o filtro e.preco >= 70 fosse aplicado no HAVING, o resultado seria diferente, pois ele filtraria os grupos pela soma dos preços, e não os equipamentos individuais.

Aplicando ao caso concreto

Vamos supor que as tabelas tenham os seguintes dados:

Tabela FABRICANTE:

id_fabricante

nome

1

Alpha

2

Beta

3

Gamma

Tabela EQUIPAMENTO:

id_equipamento

id_fabricante

preco

1

1

100

2

1

200

3

2

70

4

2

50

5

3

150

6

3

150

Aplicando o JOIN, obtemos:

f.nome

e.preco

Alpha

100

Alpha

200

Beta

70

Beta

50

Gamma

150

Gamma

150

Aplicando o WHERE e.preco >= 70, removemos a linha Beta – 50:

f.nome

e.preco

Alpha

100

Alpha

200

Beta

70

Gamma

150

Gamma

150

Aplicando o GROUP BY f.nome e o SUM(e.preco):

f.nome

SUM(e.preco)

Alpha

300

Beta

70

Gamma

300

Aplicando o HAVING SUM(e.preco) > 150, removemos o grupo Beta – 70:

f.nome

SUM(e.preco)

Alpha

300

Gamma

300

Portanto, o resultado é Alpha – 300 e Gamma – 300, que corresponde à letra B.

Alternativa A — ❌ Incorreta

Inclui Beta – 120, mas o WHERE e.preco >= 70 filtra o equipamento de preço 50, e a soma para Beta fica em 70, não 120. Além disso, o HAVING SUM(e.preco) > 150 exclui o grupo Beta, pois 70 não é maior que 150.

Alternativa B — ✅ Correta ⟵ GABARITO

A consulta retorna apenas os fabricantes cuja soma dos preços dos equipamentos (com preço >= 70) seja maior que 150. Alpha soma 300 (100 + 200) e Gamma soma 300 (150 + 150), ambos passam no HAVING. Beta soma 70 (apenas o equipamento de preço 70), que não passa no HAVING.

Alternativa C — ❌ Incorreta

Apresenta Beta – 70, mas o HAVING SUM(e.preco) > 150 exclui o grupo Beta, pois 70 não é maior que 150. Além disso, os valores de Alpha e Gamma estão corretos, mas a inclusão de Beta torna a alternativa incorreta.

Alternativa D — ❌ Incorreta

Omite o fabricante Alpha, que também atende aos critérios da consulta. Alpha soma 300, que é maior que 150, portanto deveria aparecer no resultado.

Alternativa E — ❌ Incorreta

Omite o fabricante Gamma, que também atende aos critérios da consulta. Gamma soma 300, que é maior que 150, portanto deveria aparecer no resultado.

NÃO CAIA NESSA!

A banca troca o papel do WHERE e do HAVING. O WHERE filtra linhas individuais antes da agregação, enquanto o HAVING filtra grupos depois da agregação. Se você aplicar o filtro e.preco >= 70 no HAVING, o resultado seria diferente, pois ele filtraria os grupos pela soma dos preços, e não os equipamentos individuais. Fique atento a essa distinção!

PEGA ESSA DICA!

Para resolver questões de SQL com GROUP BY e HAVING, siga a ordem de execução: 1) FROM e JOIN; 2) WHERE; 3) GROUP BY; 4) HAVING; 5) SELECT. Aplique cada etapa na ordem e você chegará ao resultado correto.

Gabarito: letra B

Link permanente: /questoes/qa433476