Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2026

Banco de DadosConsultas e Comandos em SQL
Código
fc142364
Banca
FCC
Órgão
MPE SE
Ano
2026
Cargo
Ana ( )

Atenção: A tabela Processos deve ser utilizada para resolver a questão seguinte.

 

A tabela Processos armazena informações sobre processos judiciais e possui os campos id, classe (trabalhista, penal etc), status (ativo, inativo, encerrado etc) e valor (custas associadas).

 

Com o objetivo de permitir que, em um único arquivo .sql, seja possível criar e preencher a base de dados de Audiências e Juízes e depois obter um relatório consolidado de audiências concluídas por juiz, uma analista elaborou o script SQL abaixo.

 

CREATE TABLE Juizes (
  id INT PRIMARY KEY,
  nome VARCHAR(100)
);

 

CREATE TABLE Audiencias (
  id INT PRIMARY KEY,
  juiz_id INT,
  status VARCHAR(20),
  FOREIGN KEY (juiz_id) REFERENCES Juizes(id)
);

 

INSERT INTO Juizes (id, nome) VALUES (1, 'Juiz Carlos');
INSERT INTO Juizes (id, nome) VALUES (2, 'Juiza Maria');
INSERT INTO Juizes (id, nome) VALUES (3, 'Juiz Paulo');

 

INSERT INTO Audiencias (id, juiz_id, status) VALUES (1, 1, 'Concluída');
INSERT INTO Audiencias (id, juiz_id, status) VALUES (2, 1, 'Concluída');
INSERT INTO Audiencias (id, juiz_id, status) VALUES (3, 2, 'Pendente');
INSERT INTO Audiencias (id, juiz_id, status) VALUES (4, 2, 'Concluída');
INSERT INTO Audiencias (id, juiz_id, status) VALUES (5, 3, 'Concluída');
INSERT INTO Audiencias (id, juiz_id, status) VALUES (6, 3, 'Concluída');

 

CREATE VIEW Relatorio_Audiencias AS
SELECT j.nome AS juiz, COUNT(*) AS total_concluidas
FROM Audiencias a
JOIN Juizes j ON a.juiz_id = j.id
WHERE a.status = 'Concluída'
GROUP BY j.nome
HAVING COUNT(*) > 1;

 

Considerando que esse script foi executado em sua totalidade e em condições ideais, após a consulta SELECT * FROM Relatorio_Audiencias; o resultado apresenta

 

  1. A“Juiz Carlos” com 2 e “Juiz Paulo” com 2 audiências concluídas.
  2. Bnenhum juiz, pois a cláusula HAVING exclui todos.
  3. Capenas “Juíza Maria” com 1 audiência concluída.
  4. Dtodos os juízes com pelo menos 1 audiência concluída.
  5. E“Juiz Carlos” com 2, “Juíza Maria” com 1 e “Juiz Paulo” com 2 audiências concluídas.
Revelar gabarito e comentário

GabaritoA — “Juiz Carlos” com 2 e “Juiz Paulo” com 2 audiências concluídas.

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

Consultas SQL: agrupamento, filtro e criação de visões

Gabarito: letra A. A consulta SELECT * FROM Relatorio_Audiencias retorna apenas os juízes com mais de uma audiência concluída, ou seja, "Juiz Carlos" com 2 e "Juiz Paulo" com 2 audiências concluídas. A cláusula HAVING COUNT(*) > 1 filtra os grupos após a agregação, excluindo a "Juíza Maria", que possui apenas 1 audiência concluída.

A questão envolve a criação de uma visão (VIEW) que consolida dados de duas tabelas relacionadas (Juizes e Audiencias), utilizando JOIN, GROUP BY, HAVING e a função de agregação COUNT. O comando CREATE VIEW não executa a consulta imediatamente; ele apenas armazena a definição da consulta para uso futuro. Quando a visão é consultada, o banco de dados executa a consulta subjacente e retorna os resultados naquele momento.

O JOIN combina as linhas das tabelas Audiencias (a) e Juizes (j) onde a chave estrangeira juiz_id corresponde à chave primária id. O WHERE a.status = 'Concluída' filtra apenas as audiências com status "Concluída". Em seguida, o GROUP BY j.nome agrupa as linhas resultantes pelo nome do juiz. A função COUNT(*) conta o número de linhas em cada grupo. Finalmente, o HAVING COUNT(*) > 1 filtra os grupos que têm mais de uma audiência concluída.

Vamos analisar os dados:

  • Juiz Carlos (id=1): possui as audiências 1 e 2, ambas 'Concluída' → total = 2.

  • Juíza Maria (id=2): possui as audiências 3 ('Pendente') e 4 ('Concluída') → após o filtro WHERE, apenas a 4 conta → total = 1.

  • Juiz Paulo (id=3): possui as audiências 5 e 6, ambas 'Concluída' → total = 2.

Após o GROUP BY, temos os grupos: 'Juiz Carlos' (2), 'Juíza Maria' (1) e 'Juiz Paulo' (2). O HAVING COUNT(*) > 1 mantém apenas os grupos com contagem maior que 1, ou seja, 'Juiz Carlos' e 'Juiz Paulo'. A 'Juíza Maria' é excluída porque seu total é 1, que não é maior que 1.

A pegadinha desta questão está em confundir WHERE com HAVING. O WHERE filtra linhas antes do agrupamento, enquanto o HAVING filtra grupos depois da agregação. Se o filtro fosse WHERE COUNT(*) > 1, a consulta seria inválida, pois COUNT(*) é uma função de agregação e não pode ser usada no WHERE. O HAVING é a cláusula correta para filtrar grupos com base em funções de agregação.

NÃO CAIA NESSA!

A banca explora a confusão entre WHERE e HAVING. O WHERE filtra linhas individuais antes do agrupamento; o HAVING filtra grupos após a agregação. Nesta questão, a "Juíza Maria" tem 1 audiência concluída, mas é excluída porque o HAVING exige contagem maior que 1. Se o candidato aplicar o filtro como se fosse WHERE, pode incluir a "Juíza Maria" erroneamente.

Critério

WHERE

HAVING

Momento do filtro

Antes do agrupamento (linhas individuais)

Depois do agrupamento (grupos agregados)

Pode usar funções de agregação (COUNT, SUM, AVG)?

Não

Sim

Exemplo na questão

WHERE a.status = 'Concluída'

HAVING COUNT(*) > 1

Efeito sobre a Juíza Maria (1 audiência concluída)

Incluída no grupo

Excluída do resultado final

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa correta afirma que o resultado apresenta "Juiz Carlos" com 2 e "Juiz Paulo" com 2 audiências concluídas. Isso está exatamente de acordo com a execução da consulta: após o JOIN, o WHERE filtra as audiências 'Concluída', o GROUP BY j.nome agrupa por juiz, o COUNT(*) conta as audiências de cada grupo e o HAVING COUNT(*) > 1 mantém apenas os grupos com mais de uma audiência. Portanto, apenas "Juiz Carlos" (2) e "Juiz Paulo" (2) aparecem no resultado.

Alternativa B — ❌ Incorreta

Afirma que nenhum juiz é retornado porque o HAVING exclui todos. Isso é falso. O HAVING COUNT(*) > 1 exclui apenas os grupos com contagem menor ou igual a 1, mas mantém os grupos com contagem maior que 1. Como "Juiz Carlos" e "Juiz Paulo" têm 2 audiências concluídas cada, eles são incluídos no resultado. A cláusula HAVING não exclui todos os grupos; ela apenas aplica uma condição de filtro sobre os grupos agregados.

Alternativa C — ❌ Incorreta

Afirma que apenas "Juíza Maria" com 1 audiência concluída é retornada. Isso está errado por dois motivos: primeiro, a "Juíza Maria" tem apenas 1 audiência concluída, que não atende à condição HAVING COUNT(*) > 1; segundo, mesmo que ela tivesse mais de uma, os outros juízes também seriam incluídos. O HAVING filtra grupos, não seleciona um único grupo. A alternativa confunde o filtro de grupos com uma seleção específica.

Alternativa D — ❌ Incorreta

Afirma que todos os juízes com pelo menos 1 audiência concluída são retornados. Isso ignora a cláusula HAVING COUNT(*) > 1, que exige que o grupo tenha mais de uma audiência concluída. A "Juíza Maria" tem apenas 1, portanto é excluída. A alternativa desconsidera o filtro HAVING e aplica apenas o WHERE, o que resultaria em todos os juízes com pelo menos uma audiência concluída, mas não é o que a consulta faz.

Alternativa E — ❌ Incorreta

Afirma que "Juiz Carlos" com 2, "Juíza Maria" com 1 e "Juiz Paulo" com 2 audiências concluídas são retornados. Isso inclui a "Juíza Maria", que tem apenas 1 audiência concluída, mas o HAVING COUNT(*) > 1 a exclui. A alternativa representa o resultado da consulta sem a cláusula HAVING, ou seja, apenas com WHERE e GROUP BY. A presença do HAVING é o que diferencia esta alternativa da correta.

Gabarito: letra A

Link permanente: /questoes/fc142364