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
qa699035
Banca
Quadrix
Órgão
CRP 6 (SP)
Ano
2025
Cargo
TESA ( )
Uma clínica de psicologia mantém um sistema de gerenciamento de pacientes com o modelo de banco de dados relacional simplificado a seguir: • Tabela pacientes (id, nome, data_ nascimento, diagnostico) • Tabela consultas (id, paciente_id, data_ consulta, terapeuta, observacoes) Um técnico da equipe de TI foi encarregado de executar tarefas de manutenção e análise de dados do banco por meio de comandos básicos de SQL. Com base nessa situação hipotética, julgue o item a seguir.   O comando DELETE FROM pacientes WHERE nome = ‘João’; remove o paciente com esse nome e todas as suas consultas automaticamente.
  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”.

Comandos DML: DELETE e integridade referencial

Gabarito: ERRADO (letra E). O comando DELETE FROM pacientes WHERE nome = 'João'; remove apenas o registro da tabela pacientes que atende à condição; as consultas associadas na tabela consultas não são removidas automaticamente, a menos que haja uma ação de integridade referencial configurada, como ON DELETE CASCADE na definição da chave estrangeira. A afirmação do enunciado é falsa porque generaliza o comportamento do DELETE sem considerar a necessidade de configuração explícita.

O comando DELETE é um comando da DML (Data Manipulation Language), responsável por excluir registros (tuplas) de uma tabela. Sua sintaxe básica é DELETE FROM tabela WHERE condição;. Quando executado, ele remove as linhas que satisfazem a condição da cláusula WHERE. No modelo relacional, as tabelas podem estar relacionadas por chaves estrangeiras (foreign keys). A integridade referencial é uma restrição que garante a consistência entre tabelas relacionadas. Para que a exclusão de um registro em uma tabela-pai (como pacientes) propague a exclusão para os registros filhos (como consultas), é necessário definir explicitamente a ação ON DELETE CASCADE na restrição de chave estrangeira. Sem essa configuração, o comportamento padrão varia conforme o SGBD: alguns bloqueiam a exclusão (se houver registros filhos), outros permitem a exclusão deixando os filhos órfãos, mas nunca excluem automaticamente os filhos por padrão.

Na prática, considere o seguinte: se a tabela consultas foi criada com a restrição FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE, então ao executar DELETE FROM pacientes WHERE nome = 'João';, o SGBD excluirá o paciente e, em cascata, todas as consultas cujo paciente_id corresponda ao id do João. Porém, se a restrição foi definida sem ON DELETE CASCADE (ou com ON DELETE RESTRICT/NO ACTION), a exclusão do paciente será bloqueada se houver consultas associadas, ou, em alguns SGBDs, permitida deixando as consultas órfãs. Portanto, a afirmação de que "remove o paciente e todas as suas consultas automaticamente" só seria verdadeira se houvesse a configuração ON DELETE CASCADE, o que não é mencionado no enunciado.

A pegadinha da banca está em assumir que o DELETE tem comportamento automático de propagação, quando na verdade a propagação depende da definição da chave estrangeira. O candidato que conhece apenas a sintaxe básica do DELETE pode cair na armadilha de achar que o comando remove tudo relacionado. É essencial lembrar que a integridade referencial é uma configuração explícita do esquema do banco, não um comportamento implícito do comando.

NÃO CAIA NESSA!

A banca explora a confusão entre o comando DELETE e a ação ON DELETE CASCADE. O DELETE sozinho remove apenas os registros da tabela especificada; a exclusão em cascata é uma propriedade da chave estrangeira, definida no CREATE TABLE ou ALTER TABLE. Sem essa configuração, o DELETE não propaga a exclusão.

Critério

DELETE sem ON DELETE CASCADE

DELETE com ON DELETE CASCADE

Efeito na tabela pacientes

Remove o registro do paciente

Remove o registro do paciente

Efeito na tabela consultas

Não remove automaticamente; pode bloquear a exclusão (RESTRICT/NO ACTION) ou deixar registros órfãos

Remove automaticamente todas as consultas associadas

Dependência de configuração

Comportamento padrão do SGBD, sem necessidade de declaração explícita

Requer declaração explícita na definição da chave estrangeira (FOREIGN KEY ... ON DELETE CASCADE)

Resultado da afirmação do enunciado

Falso — não remove as consultas automaticamente

Verdadeiro — remove paciente e consultas em cascata

Alternativa C — ❌ Incorreta

Afirma que o comando remove o paciente e todas as suas consultas automaticamente. Isso está errado porque a exclusão automática de registros relacionados depende da existência da cláusula ON DELETE CASCADE na definição da chave estrangeira. Sem ela, o comportamento padrão do SGBD pode ser bloquear a exclusão (se houver registros filhos) ou permitir a exclusão deixando os filhos órfãos, mas nunca excluir automaticamente. O enunciado não menciona a configuração da chave estrangeira, portanto a afirmação é falsa.

Alternativa E — ✅ Correta ⟵ GABARITO

A alternativa correta é a letra E (Errado), pois o comando DELETE FROM pacientes WHERE nome = 'João'; remove apenas o registro da tabela pacientes que atende à condição. As consultas associadas na tabela consultas só seriam removidas automaticamente se houvesse a ação ON DELETE CASCADE configurada na chave estrangeira, o que não é informado. Portanto, a afirmação do enunciado é incorreta.

Gabarito: letra E

Link permanente: /questoes/qa699035