Questão nº 53
Questão de Tecnologia da Informação · CESGRANRIO BB 01/2022 (nº 53)
Uma empresa de investimentos financeiros busca identificar novas oportunidades de negócio para pessoas jurídicas, em especial dentre aquelas que têm como característica a adoção de governança ambiental, social e corporativa (conhecida como ESG, uma sigla em inglês).
Considere que existe um banco de dados nessa empresa com as seguintes tabelas (todas as chaves primárias são numéricas):
Empresa (CNPJ, razaoSocial, endereco)
Caracteristica (cod, sigla, nome)
Tem (CNPJ, cod)
Que comando SELECT do SQL retorna apenas o CNPJ e a razão social das empresas que não têm "ESG" como característica?
- A```sql
SELECT *
FROM Empresa
WHERE Caracteristica.Sigla <> 'ESG'
``` - B```sql
SELECT E.CNPJ, E.razaoSocial
FROM Empresa E
JOIN Tem T ON (E.CNPJ = T.CNPJ)
WHERE Tem.cod = 'ESG'
``` - C```sql
SELECT E.CNPJ, E.razaoSocial
FROM Empresa E
JOIN Tem T ON (E.CNPJ = T.CNPJ)
JOIN Caracteristica C ON (C.cod = T.cod)
WHERE C.nome <> 'ESG'
``` - D```sql
SELECT E.CNPJ, E.razaoSocial
FROM Empresa E
WHERE E.CNPJ NOT IN (
SELECT T.CNPJ
FROM Tem T
JOIN Caracteristica C ON (T.cod = C.cod)
WHERE C.sigla = 'ESG'
)
``` (alternativa correta) - E```sql
SELECT Empresa.*
FROM Empresa, Tem
WHERE Empresa.CNPJ = Tem.cod
AND Tem.cod <> 'ESG'
```
Resposta comentada
Gabarito Alternativa D
Conceito-chave: A consulta precisa retornar empresas que não possuem a característica ESG. Isso é diferente de retornar empresas que possuem outras características (que podem até ter ESG também). A forma segura é usar NOT IN (ou NOT EXISTS) com uma subconsulta que lista os CNPJs das empresas que têm ESG.
- (A) Incorreta: A tabela
Caracteristicanão está noFROM, então a colunaCaracteristica.Siglanem existe no escopo; além disso,<> 'ESG'retornaria empresas que têm outras características, mas não exclui as que também têm ESG. - (B) Incorreta: O
JOINcomTemfiltra apenas empresas que têm alguma característica, e a condiçãoWHERE Tem.cod = 'ESG'compara o código numérico com a string 'ESG' (errado, poiscodé chave numérica esiglaé o texto). Além disso, retornaria só as que têm ESG, não as que não têm. - (C) Incorreta: A condição
C.nome <> 'ESG'retorna empresas que têm qualquer outra característica (ex.: "ISO"), mas não exclui as que também têm ESG. Uma empresa com ESG e ISO apareceria no resultado, o que é errado. - (D) Correta: A subconsulta
SELECT T.CNPJ ... WHERE C.sigla = 'ESG'retorna todos os CNPJs que possuem a característica ESG. ONOT INna consulta externa seleciona exatamente as empresas que não estão nessa lista, ou seja, as que não têm ESG — independente de terem outras características. - (E) Incorreta: O
FROM Empresa, Temé um produto cartesiano, e a condiçãoEmpresa.CNPJ = Tem.codcompara CNPJ com código de característica (tipos diferentes). Além disso,Tem.cod <> 'ESG'compara número com texto e não exclui empresas que têm ESG em outra linha.
Fonte: CESGRANRIO BB 01/2022 Escriturário - Agente de Tecnologia (Caderno Gabarito 1). Reproduzida para fins de estudo.