Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2025
- Código
- qa699035
- Banca
- Quadrix
- Órgão
- CRP 6 (SP)
- Ano
- 2025
- Cargo
- TESA ( )
- CCerto
- EErrado
GabaritoE — Errado
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.
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 |
|
|
|---|---|---|
Efeito na tabela | Remove o registro do paciente | Remove o registro do paciente |
Efeito na tabela | 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 ( |
Resultado da afirmação do enunciado | Falso — não remove as consultas automaticamente | Verdadeiro — remove paciente e consultas em cascata |
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.
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