Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2025

Banco de DadosSQL
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
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 seguinte.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”.

Comando DELETE e integridade referencial no SQL

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 CASCADE

Como isso não foi informado, a afirmação de que "remove o paciente e todas as suas consultas automaticamente" é falsa.

NÃO CAIA NESSA!

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

DELETE sem ON DELETE CASCADE

DELETE com ON DELETE CASCADE

Escopo da remoção

Apenas a linha da tabela pacientes

Linha da tabela pacientes + linhas relacionadas em consultas

Efeito nas consultas associadas

Permanecem intactas (ou exclusão bloqueada, conforme SGBD)

Removidas automaticamente

Exigência de definição

Nenhuma (comportamento padrão)

FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE na tabela consultas

Resultado do comando do enunciado

Remove só o paciente → afirmação errada

Removeria paciente + consultas → afirmação certa (mas não é o caso)

Alternativa C — ❌ Incorreta

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

Alternativa E — ✅ Correta ⟵ GABARITO

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