Questão FC295910
Considerando as informações apresentadas, qual comando SQL será executado sem erro?
Linguagem SQL
CESGRANRIO · 2018
O banco de dados de uma empresa contém as tabelas a seguir, que são usadas para controlar as compras de materiais de escritório.
CREATE TABLE FORNECEDOR (
ID_FORN NUMBER(5) NOT NULL,
NOME VARCHAR2(100) NOT NULL,
TEL1 CHAR(15) NOT NULL,
TEL2 CHAR(15),
TEL3 CHAR(15),
CONSTRAINT FORNECEDOR_PK PRIMARY KEY (ID_FORN)
)
CREATE TABLE MATERIAL (
ID_MATER NUMBER(5) NOT NULL,
DESCR VARCHAR2(100) NOT NULL,
CONSTRAINT MATERIAL_PK PRIMARY KEY (ID_MATER)
)
CREATE TABLE VENDA (
ID_F NUMBER(5) NOT NULL,
ID_M NUMBER(5) NOT NULL,
DATA DATE NOT NULL,
PRECO NUMBER(9,2) NOT NULL,
QTD NUMBER(5) NOT NULL,
CONSTRAINT VENDA_PK PRIMARY KEY (ID_F,ID_M,DATA.),
CONSTRAINT VENDA_FK1 FOREIGN KEY (ID_F)
REFERENCES FORNECEDOR (ID_FORN),
CONSTRAINT VENDA_FK2 FOREIGN KEY (ID_M)
REFERENCES MATERIAL (ID_MATER)
)
As Figuras abaixo exibem os dados que se encontram armazenados nas Tabelas usadas para controlar as compras de materiais de escritório.

Considerando as informações apresentadas, qual comando SQL será executado sem erro?
- INSERT INTO FORNECEDOR (ID_FORN,NOME,TEL2,TEL3) VALUES (5555, 'FORNECEDOR 5', '(21) 3456-9088', NULL)
- INSERT INTO VENDA VALUES (3030, 2222, '02/02/2018', 10.50, 80)
- DELETE FROM FORNECEDOR WHERE ID_FORN NOT IN (SELECT ID_F FROM VENDA.)
- DELETE FROM FORNECEDOR WHERE TEL3 IS NOT NULL
- INSERT INTO FORNECEDOR VALUES(9999, 'XXX', '(61) 2113-6589')
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
O comando DELETE FROM FORNECEDOR WHERE ID_FORN NOT IN (SELECT ID_F FROM VENDA) remove todos os fornecedores que não aparecem na tabela VENDA, ou seja, que nunca realizaram vendas.
Isso é permitido sem erro porque a restrição de integridade referencial (foreign key) existe em VENDA.ID_F apontando para FORNECEDOR.ID_FORN. Ao excluir apenas fornecedores que não têm correspondência em VENDA, não há linhas em VENDA que referenciem esses fornecedores, portanto nenhuma referência é quebrada.
Importante: o uso de NOT IN pode ser problemático se a subconsulta retornar NULL, pois então a condição falha para todas as linhas. Aqui isso não ocorre porque VENDA.ID_F foi definido como NOT NULL, garantindo que a subconsulta não gere NULL e que a cláusula funcione conforme esperado.
Conteúdo do catálogo FC Concursos · Atualizado em