Questão FC670724
O Hospital Campo Grande está implementando um novo sistema de banco de dados para gerenciar informações sobre médicos, pacientes e atendimentos. O banco de dados apresenta as tabel
Linguagem SQL
QUADRIX · 2025
O Hospital Campo Grande está implementando um novo sistema de banco de dados para gerenciar informações sobre médicos, pacientes e atendimentos. O banco de dados apresenta as tabelas a seguir.
CREATE TABLE Medicos ( id_medico INT PRIMARY KEY, nome VARCHAR(100), especialidade VARCHAR(50), salario DECIMAL(10,2) ); CREATE TABLE Pacientes ( id_paciente INT PRIMARY KEY, nome VARCHAR(100), data_nascimento DATE ); CREATE TABLE Atendimentos ( id_atendimento INT PRIMARY KEY, id_medico INT, id_paciente INT, data_atendimento DATE, descricao VARCHAR(100), FOREIGN KEY (id_medico) REFERENCES Medicos(id_medico), FOREIGN KEY (id_paciente) REFERENCES Pacientes(id_paciente) );
Com relação à situação hipotética apresentada e aos comandos SQL, julgue o item seguinte.
O comando a seguir retorna os pacientes que nunca foram atendidos:
SELECT P.nome FROM Pacientes P WHERE P.id_paciente NOT IN (SELECT DISTINCT id_paciente FROM Atendimentos);
Mostrar resposta e comentário
Gabarito
Errado
Comentário do professor
A afirmação foi julgada ERRADO porque a consulta usa NOT IN, que falha quando a subconsulta retorna algum valor NULL.
Em SQL existe lógica ternária: comparações com NULL resultam em unknown. Assim, se a subconsulta produz um NULL, a condição \(P.id\_paciente \notin \{...\}\) torna-se indeterminada e a linha pode ser excluída do resultado mesmo que o paciente nunca tenha sido atendido.
No esquema apresentado, a coluna Atendimentos.id_paciente não foi declarada como NOT NULL, portanto pode conter NULL e a subconsulta pode retorná‑lo.
A forma segura é usar NOT EXISTS ou um LEFT JOIN com checagem de NULL. Exemplo recomendado:
SELECT P.nome FROM Pacientes P WHERE NOT EXISTS (SELECT 1 FROM Atendimentos A WHERE A.id_paciente = P.id_paciente);
Conteúdo do catálogo FC Concursos · Atualizado em