Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025

Banco de DadosConsultas e Comandos em SQL
Código
ce417328
Banca
CESPE / CEBRASPE
Órgão
PF
Ano
2025
Cargo
Estat ( )

A seguir, são apresentados um modelo de banco de dados, consistindo de quatro tabelas, bem como os comandos SQL utilizados para a criação e a inserção de dados nessas tabelas.

 

Imagem associada para resolução da questão

 

criação das tabelas


CREATE TABLE Envolvido (
  idEnvolvido INT NOT NULL,
  Alcunha VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (idEnvolvido));


CREATE TABLE TipoInquerito (
  idTipoInquerito INT NOT NULL,
  TipoInquerito VARCHAR(45) NOT NULL,
  PRIMARY KEY (idTipoInquerito));


CREATE TABLE Inquerito (
  idInquerito INT NOT NULL,
  NumeroInquerito INT NOT NULL,
  idTipoInquerito INT NOT NULL,
  PRIMARY KEY (idInquerito),
    FOREIGN KEY (idTipoInquerito)
    REFERENCES TipoInquerito (idTipoInquerito));


CREATE TABLE EnvolvidoInquerito (
  idEnvolvido INT NOT NULL,
  idInquerito INT NOT NULL,
  PRIMARY KEY (idEnvolvido, idInquerito),
    FOREIGN KEY (idEnvolvido)
    REFERENCES Envolvido (idEnvolvido),
    FOREIGN KEY (idInquerito)
    REFERENCES Inquerito (idInquerito));


inserção de dados nas tabelas

 

INSERT INTO Envolvido (idEnvolvido, Alcunha)
VALUES (10, 'Gargamel');

INSERT INTO Envolvido (idEnvolvido, Alcunha)
VALUES (20, 'Vingador');

INSERT INTO Envolvido (idEnvolvido, Alcunha)
VALUES (30, 'Esqueleto');

 

INSERT INTO TipoInquerito (idTipoInquerito,
TipoInquerito) VALUES (11, 'Inquérito
Policial');

INSERT INTO TipoInquerito (idTipoInquerito,
TipoInquerito) VALUES (12, 'Inquérito Civil');
INSERT INTO TipoInquerito (idTipoInquerito,
TipoInquerito) VALUES (13, 'Notícia-Crime');

INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES (1,111, 13);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES(2,121, 12);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES(3,131, 13);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES (4,444, 11);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES(5,555, 13);

 

INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (10, 1);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (20, 1);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (20, 4);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (30, 1);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (30, 3);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (30, 5);

 

Considerando as informações precedentes, julgue o próximo item, relativos à SQL.

 

Considere o comando SQL a seguir.

 

SELECT DISTINCT EI.idEnvolvido,
I.idTipoInquerito
FROM Envolvido AS E
INNER JOIN EnvolvidoInquerito AS EI ON
E.idEnvolvido = EI.idEnvolvido
INNER JOIN Inquerito AS I ON EI.idInquerito =
I.idInquerito
WHERE NumeroInquerito = 111;

 

Ao ser executado, esse comando apresentará o resultado seguinte.

 

idEnvolvido      idTipoInquerito
30                     13

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

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 – Consulta com JOIN, WHERE e DISTINCT

Gabarito: Errado. A consulta apresentada retorna apenas o envolvido com idEnvolvido = 30 e idTipoInquerito = 13, pois o filtro WHERE NumeroInquerito = 111 restringe o resultado ao inquérito de número 111, que é o inquérito de idInquerito = 1, do tipo 13. No entanto, o comando SELECT DISTINCT elimina duplicatas, e como o envolvido 30 é o único que participa do inquérito 1, o resultado é exatamente o mostrado. A afirmação está correta.

A consulta realiza uma junção interna (INNER JOIN) entre as tabelas Envolvido, EnvolvidoInquerito e Inquerito. A junção interna combina registros das tabelas onde a condição de junção é satisfeita. Neste caso, a condição E.idEnvolvido = EI.idEnvolvido liga a tabela Envolvido à tabela associativa EnvolvidoInquerito, e a condição EI.idInquerito = I.idInquerito liga a tabela associativa à tabela Inquerito. O filtro WHERE NumeroInquerito = 111 seleciona apenas os registros do inquérito com número 111.

Vamos analisar os dados:

  • A tabela Inquerito contém os registros: (1, 111, 13), (2, 121, 12), (3, 131, 13), (4, 444, 11), (5, 555, 13).

  • O filtro WHERE NumeroInquerito = 111 seleciona apenas o registro (1, 111, 13).

  • A tabela EnvolvidoInquerito contém os registros: (10, 1), (20, 1), (20, 4), (30, 1), (30, 3), (30, 5).

  • A junção com o inquérito 1 resulta nos envolvidos 10, 20 e 30.

  • O SELECT DISTINCT elimina duplicatas, mas como cada envolvido aparece uma única vez, o resultado é:

idEnvolvido

idTipoInquerito

10

13

20

13

30

13

Portanto, o resultado apresentado no enunciado (apenas 30 e 13) está incorreto, pois faltam os envolvidos 10 e 20. A afirmação é falsa.

Alternativa C — ❌ Incorreta

A alternativa afirma que o comando apresentará o resultado com apenas idEnvolvido = 30 e idTipoInquerito = 13. Isso está errado porque a consulta retorna três linhas: os envolvidos 10, 20 e 30, todos com idTipoInquerito = 13. O filtro WHERE NumeroInquerito = 111 seleciona o inquérito 1, que possui três envolvidos na tabela associativa. O SELECT DISTINCT não elimina essas linhas, pois cada par (idEnvolvido, idTipoInquerito) é único. O erro da alternativa é omitir os envolvidos 10 e 20, apresentando um resultado parcial.

Alternativa E — ✅ Correta ⟵ GABARITO

A alternativa afirma que o comando não apresentará o resultado mostrado. Isso está correto, pois o resultado real da consulta inclui os envolvidos 10, 20 e 30, todos com idTipoInquerito = 13. O enunciado apresenta apenas o envolvido 30, o que é incompleto e, portanto, incorreto. A consulta está bem formulada, mas o resultado esperado está errado.

NÃO CAIA NESSA!

A banca tenta confundir o candidato ao apresentar um resultado parcial da consulta. O candidato pode pensar que o DISTINCT elimina linhas, mas ele apenas remove duplicatas exatas. Como cada envolvido tem um idEnvolvido diferente, todas as três linhas são mantidas. Fique atento: o WHERE filtra linhas, mas não remove colunas nem agrupa resultados.

PEGA ESSA DICA!

Para resolver questões de SQL, execute a consulta passo a passo: primeiro identifique as tabelas envolvidas, depois aplique os JOINs, em seguida o WHERE, e por fim o SELECT e o DISTINCT. Monte uma tabela intermediária com os resultados de cada etapa. Isso evita erros de interpretação.

Gabarito: letra E

Link permanente: /questoes/ce417328