Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2025

Banco de DadosConsultas e Comandos em SQL
Código
qa698951
Banca
Quadrix
Órgão
CRM MS
Ano
2025
Cargo
Ana ( )
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.   Para excluir, por exemplo, o médico de id_medico = 5 da tabela Medicos, garantindo que não existam atendimentos vinculados a ele, pode‑se usar o seguinte comando: DELETE FROM Medicos WHERE id_medico = 5 AND NOT EXISTS (SELECT 1 FROM Atendimentos WHERE id_medico = 5);
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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

Comando DELETE com subconsulta NOT EXISTS

Gabarito: CERTO (letra C). O comando apresentado é válido e cumpre exatamente o que o enunciado pede: ele exclui o médico de id_medico = 5 apenas se não existir nenhum registro na tabela Atendimentos com esse mesmo id_medico, garantindo a integridade referencial antes da exclusão. A lógica está correta e a sintaxe é aceita pelos principais SGBDs relacionais.

O comando DELETE é um comando da sublinguagem DML (Data Manipulation Language), responsável por manipular os dados dentro das tabelas. Diferentemente do DROP, que remove a estrutura da tabela, o DELETE remove linhas (registros) de uma tabela existente. A sintaxe básica é DELETE FROM nome_tabela WHERE condição. Sem a cláusula WHERE, o comando apagaria todas as linhas da tabela, o que raramente é desejado.

A questão explora um cenário clássico de integridade referencial: a tabela Atendimentos possui uma chave estrangeira (FOREIGN KEY) que referencia a tabela Medicos. Isso significa que não se pode simplesmente excluir um médico que possua atendimentos vinculados, pois isso violaria a integridade referencial — o banco de dados rejeitaria a operação (a menos que a chave estrangeira tenha sido definida com ON DELETE CASCADE, o que não é o caso aqui).

A solução apresentada usa uma subconsulta correlacionada com NOT EXISTS. A subconsulta SELECT 1 FROM Atendimentos WHERE id_medico = 5 verifica se existe pelo menos um atendimento com id_medico = 5. O NOT EXISTS retorna verdadeiro apenas se a subconsulta não retornar nenhuma linha. Assim, o DELETE só é executado se não houver atendimentos vinculados ao médico 5. Essa é uma técnica correta e amplamente utilizada para garantir que a exclusão não viole a integridade referencial.

É importante notar que a subconsulta poderia ser escrita de forma mais elegante usando uma correlação com a linha que está sendo avaliada, por exemplo: NOT EXISTS (SELECT 1 FROM Atendimentos a WHERE a.id_medico = Medicos.id_medico). No entanto, como o comando filtra por um valor fixo (id_medico = 5), a forma apresentada também é correta e funciona perfeitamente. A banca não exige a forma mais otimizada, apenas que o comando atinja o objetivo proposto.

NÃO CAIA NESSA!

A banca pode tentar confundir o candidato sugerindo que o comando está errado porque a subconsulta não está correlacionada com a linha que está sendo excluída. Mas, como o WHERE já fixa o id_medico = 5, a subconsulta também filtra por esse mesmo valor, tornando a correlação desnecessária. O comando está correto.

Item — ✅ CERTO

O comando DELETE FROM Medicos WHERE id_medico = 5 AND NOT EXISTS (SELECT 1 FROM Atendimentos WHERE id_medico = 5) está correto. Ele:

  • Filtra a linha da tabela Medicos com id_medico = 5;

  • Verifica, por meio da subconsulta com NOT EXISTS, se existe algum registro em Atendimentos com id_medico = 5;

  • Se não existir, executa a exclusão; se existir, não executa, preservando a integridade referencial.

A sintaxe é válida em SGBDs como MySQL, PostgreSQL, SQL Server e Oracle. A lógica atende exatamente ao requisito do enunciado: "garantindo que não existam atendimentos vinculados a ele".

Gabarito: letra C (CERTO)

Link permanente: /questoes/qa698951