Questão nº 48
Questão de Análise de Sistemas · FGV TJDFT 2022 (nº 48)
No SQL Server 19, o comando de criação de restrições de chaves estrangeiras (em inglês, foreign key constraints) oferece as cláusulas ON DELETE e ON UPDATE, cujo conjunto de opções permitidas é:
- ACASCADE, NO ACTION, RAISE ERROR e SET NULL;
- BCASCADE, NO ACTION, RESTRICT e SET NULL;
- CCASCADE, NO ACTION, SET DEFAULT e SET NULL; (alternativa correta)
- DNO ACTION, RAISE ERROR, SET DEFAULT e SET NULL;
- ERESTRICT, SET DEFAULT e SET NULL.
Resposta comentada
Gabarito Alternativa C
Conceito-chave: As foreign key constraints no SQL Server definem o que acontece com as linhas filhas quando a linha pai é excluída (`ON DELETE`) ou atualizada (`ON UPDATE`). As opções válidas são apenas quatro: CASCADE (propaga a ação), NO ACTION (bloqueia a ação), SET NULL (define a coluna como NULL) e SET DEFAULT (define o valor padrão).
(A) Incorreta: `RAISE ERROR` não existe no SQL Server; o bloqueio é feito com `NO ACTION`, e `RESTRICT` é do padrão SQL/MySQL, não do SQL Server.
(B) Incorreta: `RESTRICT` não é uma opção no SQL Server — ele usa `NO ACTION` para o mesmo efeito de bloqueio, mas `RESTRICT` não é aceito na sintaxe.
(C) Correta: O SQL Server aceita exatamente `CASCADE`, `NO ACTION`, `SET DEFAULT` e `SET NULL` para as cláusulas `ON DELETE` e `ON UPDATE`, conforme a documentação oficial.
(D) Incorreta: `RAISE ERROR` não é uma cláusula válida; o erro de violação de restrição é lançado automaticamente pelo `NO ACTION`.
(E) Incorreta: Faltam `CASCADE` e `NO ACTION`, que são as opções mais usadas; `RESTRICT` não existe no SQL Server.
Armadilha da banca (no distrator B): A pegadinha clássica é confundir `RESTRICT` (do MySQL/Padrão SQL) com `NO ACTION` (do SQL Server). No SQL Server, `NO ACTION` já é o comportamento padrão de bloqueio — `RESTRICT` nem é reconhecido pelo parser. Quem conhece outros bancos cai nessa.
Fonte: FGV TJDFT 2022 Analista Judiciário - Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.