Questão nº 44

Questão de Tecnologia da Informação · FGV CVM 2024 (nº 44)

FGV2024Analista CVM - Ciência de Dados (Perfil 7)Tecnologia da Informação
Gabarito: Cver comentário ↓

Observe o script SQL a seguir.

CREATE TABLE AUDITOR (ID_A INT NOT NULL, Nome varchar(20), PRIMARY KEY (ID_A));
CREATE TABLE AUDITADO (ID_O INT NOT NULL, Nome varchar(20), ID_A INT, PRIMARY KEY (ID_O), FOREIGN KEY (ID_A) REFERENCES AUDITOR(ID_A));
INSERT INTO AUDITOR (ID_A, Nome) VALUES (1, 'Maite');
INSERT INTO AUDITOR (ID_A, Nome) VALUES (2, 'Lucca');
INSERT INTO AUDITOR (ID_A, Nome) VALUES (3, 'Maria Clara');
INSERT INTO AUDITADO (ID_O, Nome, ID_A) VALUES (1, 'Felipe', 1);
INSERT INTO AUDITADO (ID_O, Nome, ID_A) VALUES (2, 'Stella', 2);
INSERT INTO AUDITADO (ID_O, Nome, ID_A) VALUES (3, 'Patricia', NULL);

Para analisar quais auditores estão realizando auditoria em quais auditados, é necessária a execução de uma consulta SQL que apresente o seguinte resultado:

AuditorAuditado
MaiteFelipe
LuccaStella

Para obter o resultado apresentado, deve-se executar a consulta SQL:

Resposta comentada

Gabarito Alternativa C

Uma junção (JOIN) em SQL é usada para combinar linhas de duas ou mais tabelas com base em uma coluna relacionada entre elas, permitindo que você veja dados de diferentes tabelas juntos.

(A) Incorreta: Esta consulta tenta comparar um tipo inteiro (`AUDITOR.ID_A`) com uma lista de tipos de texto (`AUDITADO.Nome`) usando o operador `ALL`, o que resultará em um erro de tipo de dado ou em uma condição sempre falsa. Além disso, ela seleciona apenas o nome do auditor, não o par "Auditor" e "Auditado".
(B) Incorreta: Embora `FROM AUDITOR, AUDITADO` faça uma junção implícita (produto cartesiano), o uso de `HAVING` sem uma cláusula `GROUP BY` é uma má prática e não é padrão SQL para filtrar linhas. A cláusula correta para filtrar linhas antes de qualquer agrupamento é `WHERE`. A armadilha aqui é que alguns sistemas de banco de dados podem permitir `HAVING` como um `WHERE` em certas situações, mas não é a forma padrão nem a mais robusta.
(C) Correta: Esta consulta utiliza um `INNER JOIN` (junção interna), que é a forma padrão e mais clara de combinar tabelas. Ela seleciona os nomes do auditor e do auditado (`AUDITOR.Nome as 'Auditor'`, `AUDITADO.Nome as 'Auditado'`) e os relaciona quando há uma correspondência exata nos IDs (`ON AUDITADO.ID_A=AUDITOR.ID_A`). O `INNER JOIN` garante que apenas os pares onde o `ID_A` existe em ambas as tabelas sejam retornados, excluindo auditores sem auditados e auditados sem um `ID_A` correspondente ou com `ID_A` nulo.
(D) Incorreta: Esta consulta usa `EXISTS` para verificar se há algum auditado para um determinado auditor. Ela retornaria apenas os nomes dos auditores que possuem pelo menos um auditado, mas não os nomes dos auditados em si, nem o formato de duas colunas desejado.
(E) Incorreta: A cláusula `UNION` combina os resultados de duas consultas verticalmente, empilhando-os um sobre o outro. Ela não relaciona dados entre tabelas horizontalmente para formar pares, e o resultado seria uma única coluna contendo todos os nomes de auditores e auditados.

Fonte: FGV CVM 2024 Analista CVM - Ciência de Dados (Perfil 7) (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho