Olá, pessoal do Gran Cursos!
Aqui é o Prof. Washington Almeida e hoje vamos esclarecer uma dúvida muito comum em SQL que surgiu em nossa Questão 19 sobre exclusão de dados em tabelas com restrições de integridade.
A Questão
Ano: 2018 Banca: CESPE / CEBRASPE Órgão: Polícia Federal Prova: CESPE – 2018 – Polícia Federal – Perito Criminal Federal – Área 3
O comando SQL a seguir permite apagar o conteúdo da tabela colaborador_organograma.
delete from colaborador_organograma;

Texto, Carta
O conteúdo gerado por IA pode estar incorreto.” À primeira vista, parece simples: DELETE remove registros da tabela informada. Porém, no banco de dados, temos regras de integridade referencial (foreign keys) que podem impedir a exclusão.
Estrutura das Tabelas
– organograma: guarda os cargos e hierarquia.
– colaborador: guarda os colaboradores, identificados por CPF.
– colaborador_organograma: é a tabela associativa que liga colaborador a organograma, armazenando nomeação e exoneração.
Essa última tabela possui chaves estrangeiras para colaborador e organograma:
foreign key (cpf) references colaborador,
foreign key (cargo) references organograma(id)
O Problema
Quando tentamos apagar os registros de colaborador_organograma, o banco pode recusar se houver regras ON DELETE RESTRICT ou se o SGBD exigir ordem lógica de exclusão. Isso acontece porque a tabela está amarrada às tabelas principais.
Como Resolver
Existem três caminhos principais:
1. Excluir primeiro os registros filhos (colaborador_organograma).
– Primeiro limpamos colaborador_organograma.
– Depois, se necessário, podemos remover registros de colaborador e organograma.
2. Usar TRUNCATE com CASCADE (em SGBDs que suportam, como PostgreSQL e Oracle):
truncate table colaborador_organograma cascade;
3. Configurar ON DELETE CASCADE nas constraints, assim os vínculos são removidos automaticamente:
alter table colaborador_organograma
add constraint fk_colaborador_organograma_cpf
foreign key (cpf) references colaborador(cpf)
on delete cascade;
Script Didático – Exclusão em Ordem Correta
Para a situação da questão, o script correto para apagar todos os vínculos seria:
— 1. Apagar todos os vínculos entre colaboradores e organograma
delete from colaborador_organograma;
— 2. (Opcional) Apagar os colaboradores
delete from colaborador;
— 3. (Opcional) Apagar os cargos do organograma
delete from organograma;
Conclusão
A questão mostra que nem sempre um comando simples funciona no mundo real. É fundamental entender a ordem de exclusão e como funcionam as chaves estrangeiras.
– Se quiser flexibilidade: use ON DELETE CASCADE.
– Se quiser controle total: siga a ordem lógica de exclusão manual.
✍️ Prof. Washington Almeida
Gran Cursos – Banco de Dados / SQL
![[BLACK FRIDAY 2025] Ilimitada Dupla Prorrogado – Cabeçalho](https://blog-static.infra.grancursosonline.com.br/wp-content/uploads/2025/11/27151344/bf25-ai-dupla-prorrogado-cabecalho.webp)
![[BLACK FRIDAY 2025] Ilimitada Dupla Prorrogado – Post](https://blog-static.infra.grancursosonline.com.br/wp-content/uploads/2025/11/27151935/bf25-ai-dupla-prorrogado-post.webp)



Participe da conversa