Questão de Banco de Dados — SQL — Quadrix 2025
- Código
- qg602048
- Banca
- Quadrix
- Órgão
- CRP - SP
- Ano
- 2025
- Nível
- Médio
- Cargo
- Técnico Especializado em Suporte Administrativo - Técnico em Tecnologia da Informação e Comunicação
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO (letra E). O comando DELETE FROM pacientes WHERE nome = 'João'; remove apenas a(s) linha(s) da tabela pacientes que atende(m) à condição — ele não remove automaticamente as consultas associadas na tabela consultas, a menos que haja uma cláusula ON DELETE CASCADE definida na chave estrangeira que relaciona as duas tabelas. Como o enunciado não menciona essa cláusula, a afirmação está incorreta.
O comando DELETE é uma instrução da sublinguagem DML (Data Manipulation Language) do SQL, usada para remover linhas (tuplas) de uma tabela. Sua sintaxe básica é DELETE FROM nome_da_tabela WHERE condição;. A cláusula WHERE é opcional, mas, sem ela, todas as linhas da tabela seriam removidas. No caso apresentado, a condição nome = 'João' filtra apenas os registros da tabela pacientes cujo nome seja exatamente 'João'.
A questão central aqui é a integridade referencial. Em um banco de dados relacional, quando uma tabela possui uma chave estrangeira que referencia outra tabela (como consultas.paciente_id referencia pacientes.id), o comportamento ao excluir um registro da tabela-pai depende da ação definida na restrição de chave estrangeira. As opções mais comuns são:
ON DELETE CASCADE: exclui automaticamente as linhas filhas quando a linha-pai é excluída.
ON DELETE SET NULL: define a coluna da chave estrangeira como NULL nas linhas filhas.
ON DELETE RESTRICT (ou NO ACTION): impede a exclusão da linha-pai se houver linhas filhas referenciando-a.
Sem ação definida: o comportamento padrão varia conforme o SGBD, mas geralmente impede a exclusão ou gera um erro se houver dependências.
No enunciado, as tabelas são descritas apenas como pacientes (id, nome, data_nascimento, diagnostico) e consultas (id, paciente_id, data_consulta, terapeuta, observacoes). Não há menção a nenhuma restrição de chave estrangeira com ON DELETE CASCADE. Portanto, o comando DELETE remove apenas o paciente da tabela pacientes; as consultas associadas na tabela consultas permanecem intactas (ou a exclusão pode até ser bloqueada, dependendo do SGBD e da configuração da chave estrangeira).
Para que a exclusão em cascata ocorresse, seria necessário que a tabela consultas tivesse uma definição como:
FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADEComo isso não foi informado, a afirmação de que "remove o paciente e todas as suas consultas automaticamente" é falsa.
A banca explora a confusão entre o comportamento padrão do DELETE e a ação ON DELETE CASCADE. O candidato que assume que a exclusão em cascata é automática em qualquer relacionamento acaba marcando "Certo". Lembre-se: a exclusão em cascata só ocorre se a chave estrangeira for explicitamente definida com ON DELETE CASCADE. Sem essa cláusula, o DELETE age apenas na tabela indicada no comando.
Critério |
|
|
|---|---|---|
Escopo da remoção | Apenas a linha da tabela | Linha da tabela |
Efeito nas consultas associadas | Permanecem intactas (ou exclusão bloqueada, conforme SGBD) | Removidas automaticamente |
Exigência de definição | Nenhuma (comportamento padrão) |
|
Resultado do comando do enunciado | Remove só o paciente → afirmação errada | Removeria paciente + consultas → afirmação certa (mas não é o caso) |
Afirma que o comando DELETE FROM pacientes WHERE nome = 'João'; remove o paciente e todas as suas consultas automaticamente. Isso está errado porque o DELETE atua somente na tabela pacientes. A remoção automática de registros relacionados na tabela consultas exigiria a definição de uma chave estrangeira com ON DELETE CASCADE, o que não foi mencionado no enunciado. Sem essa cláusula, as consultas associadas ao paciente permanecem na tabela consultas (ou a exclusão pode ser bloqueada, dependendo do SGBD).
A alternativa correta é a que nega a afirmação. O comando DELETE remove apenas as linhas da tabela pacientes que satisfazem a condição nome = 'João'. A exclusão em cascata das consultas não é automática; ela depende da existência de uma restrição de chave estrangeira com ON DELETE CASCADE na tabela consultas. Como o enunciado não traz essa definição, a afirmação é errada.
Gabarito: letra E
Link permanente: /questoes/qg602048