Questão FC670726
O Hospital Campo Grande do Norte deseja gerenciar a participação de seus médicos em congressos médicos. Para isso, um banco de dados relacional foi projetado com as tabelas seguir.
Linguagem SQL
QUADRIX · 2025
O Hospital Campo Grande do Norte deseja gerenciar a participação de seus médicos em congressos médicos. Para isso, um banco de dados relacional foi projetado com as tabelas seguir.
CREATE TABLE Medicos ( id_medico INT PRIMARY KEY, nome VARCHAR(100) NOT NULL, especialidade VARCHAR(50) NOT NULL );
CREATE TABLE Congressos ( id_congresso INT PRIMARY KEY, nome VARCHAR(100) NOT NULL, local VARCHAR(100) NOT NULL, data_inicio DATE NOT NULL, data_fim DATE NOT NULL CHECK (data_fim > = data_inicio) );
CREATE TABLE Participacoes ( id_medico INT, id_congresso INT, papel VARCHAR(50) CHECK (papel IN (‘Palestrante’, ‘Ouvinte’, ‘Organizador)), data_inscricao TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id_medico, id_congresso), FOREIGN KEY (id_medico) REFERENCES Medicos(id_medico) ON DELETE CASCADE, FOREIGN KEY (id_congresso) REFERENCES Congressos(id_congresso) ON DELETE CASCADE );
Além disso, para facilitar consultas, foi criada a seguinte view.
Com base nessa situação hipotética, julgue o item a seguir.
O comando a seguir encontra todos os médicos que participaram de congressos em 2023, mas não participaram de nenhum congresso em 2024.
SELECT DISTINCT M.nome FROM Medicos M JOIN Participacoes P ON M.id_medico = P.id_medico JOIN Congressos C ON P.id_congresso = C.id_congresso WHERE EXTRACT(YEAR FROM C.data_inicio) = 2023 AND M.id_medico NOT IN ( SELECT P2.id_medico FROM Participacoes P2 JOIN Congressos C2 ON P2.id_congresso = C2.id_congresso WHERE EXTRACT(YEAR FROM C2.data_inicio) = 2024 );
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
A consulta principal usa JOIN e EXTRACT(YEAR FROM C.data_inicio) = 2023 para formar o conjunto A de médicos que participaram de congressos iniciados em 2023. O DISTINCT evita nomes repetidos quando um médico teve várias participações.
A subquery retorna o conjunto B de médicos com congressos iniciados em 2024. O predicado NOT IN remove do conjunto A todos os elementos que aparecem em B, realizando a diferença de conjuntos \(A - B\).
Importante: o campo id_medico em Participacoes integra a PRIMARY KEY, logo é NOT NULL, eliminando a clássica falha lógica do NOT IN causada por valores nulos. Assim, a consulta está correta para o enunciado.
Conteúdo do catálogo FC Concursos · Atualizado em