Questão nº 35
Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2021 (nº 35)
Um programador experiente estava revisando o código de um estagiário e detectou a instrução SQL abaixo, complicada demais para seu objetivo.
```sql
SELECT * FROM Compras where codProduto not in (select codProduto from Produtos where codProduto<3 or valor<4000)
```
Para simplificar o código, sem alterar a resposta, a instrução apresentada acima pode ser substituída por
- A`SELECT * FROM Compras where codProduto<3 or valor<4000`
- B`SELECT * FROM Compras where codProduto<3 and valor<4000`
- C`SELECT * FROM Compras where codProduto<=3 and valor<=4000`
- D`SELECT * FROM Compras where codProduto>=3 and valor>=4000` (alternativa correta)
- E`SELECT * FROM Compras where codProduto>=3 or valor>=4000`
Resposta comentada
Gabarito Alternativa D
O comando NOT IN com uma subconsulta retorna as linhas de Compras cujo codProduto não está na lista dos produtos que atendem à condição interna (codProduto<3 OR valor<4000). Ou seja, ele exclui exatamente os produtos que têm codProduto<3 ou valor<4000. Para manter o mesmo resultado, precisamos da negação lógica dessa condição: NOT (codProduto<3 OR valor<4000), que pela Lei de De Morgan equivale a codProduto>=3 AND valor>=4000.
- (A) Incorreta:
codProduto<3 OR valor<4000é o oposto do que queremos — isso retornaria justamente os produtos que a consulta original exclui. - (B) Incorreta:
codProduto<3 AND valor<4000é um subconjunto menor da condição excluída, mas não representa a negação completa (produtos comcodProduto>=3evalor<4000ficariam de fora indevidamente). - (C) Incorreta:
codProduto<=3 AND valor<=4000usa limites inclusivos, o que incluiria produtos comcodProduto=3ouvalor=4000que a original exclui (pois a original exclui apenas<3e<4000). - (D) Correta: A negação de
codProduto<3 OR valor<4000écodProduto>=3 AND valor>=4000(Lei de De Morgan), que mantém exatamente os produtos que não estão na subconsulta, preservando o resultado original. - (E) Incorreta:
codProduto>=3 OR valor>=4000é a negação decodProduto<3 AND valor<4000, não da condição original — isso incluiria produtos que a consulta original exclui (ex.:codProduto=1evalor=5000).
Fonte: CESGRANRIO BASA 01/2021 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.