Questão nº 37

Questão de Tecnologia da Informação · FGV TCE-SP 2023 (nº 37)

FGV2023Agente da Fiscalização - TITecnologia da Informação
Gabarito: Dver comentário ↓

Quando referidas, considere as tabelas relacionais TX e TY, criadas e instanciadas com o script SQL a seguir.

create table TY(C int primary key not null, A int)
create table TX(A int primary key not null, B int,
                foreign key (B) references TY(C)
                  on delete cascade
               )
insert into TY    values (1,0)
insert into TY(C) values (2)
insert into TY(C) values (3)
insert into TY    values (5,NULL)
insert into TY    values (6,NULL)
insert into TX values (1,2)
insert into TX values (2,1)
insert into TX values (3,2)
insert into TX values (4,2)

Com referência às tabelas TX e TY, como descritas anteriormente, analise o comando SQL a seguir.

select count(*)
from TX t1 left join TY t2 on t1.B=t2.A

O valor exibido pela execução desse comando é:

Resposta comentada

Gabarito Alternativa D

O LEFT JOIN (ou LEFT OUTER JOIN) retorna todas as linhas da tabela da esquerda (a primeira tabela mencionada, TX neste caso), e as linhas correspondentes da tabela da direita (TY) que satisfazem a condição ON. Se não houver correspondência na tabela da direita para uma linha da tabela da esquerda, as colunas da tabela da direita serão preenchidas com NULL. O COUNT(*) simplesmente conta o número total de linhas resultantes dessa operação de junção.

Vamos analisar as tabelas e a junção:

Tabela TY:

C | A
--|---
1 | 0
2 | NULL
3 | NULL
5 | NULL
6 | NULL

Tabela TX:

A | B
--|---
1 | 2
2 | 1
3 | 2
4 | 2

A condição de junção é t1.B = t2.A.
Vamos verificar para cada linha de TX (tabela da esquerda):

  1. TX (A=1, B=2): Procura em TY por A = 2.
    • Em TY, os valores da coluna A são 0 ou NULL. Não há A = 2.
    • Resultado da junção para esta linha: (1, 2, NULL, NULL) (linha de TX + NULLs para TY).
  2. TX (A=2, B=1): Procura em TY por A = 1.
    • Em TY, os valores da coluna A são 0 ou NULL. Não há A = 1.
    • Resultado da junção para esta linha: (2, 1, NULL, NULL) (linha de TX + NULLs para TY).
  3. TX (A=3, B=2): Procura em TY por A = 2.
    • Em TY, os valores da coluna A são 0 ou NULL. Não há A = 2.
    • Resultado da junção para esta linha: (3, 2, NULL, NULL) (linha de TX + NULLs para TY).
  4. TX (A=4, B=2): Procura em TY por A = 2.
    • Em TY, os valores da coluna A são 0 ou NULL. Não há A = 2.
    • Resultado da junção para esta linha: (4, 2, NULL, NULL) (linha de TX + NULLs para TY).

Como é um LEFT JOIN, todas as 4 linhas da tabela TX (a tabela da esquerda) são mantidas no resultado final. Como nenhuma delas encontrou uma correspondência na tabela TY com base na condição t1.B = t2.A (pois os valores de t1.B são 1 e 2, e os valores de t2.A são 0 ou NULL, e NULL não corresponde a nada em uma comparação de igualdade), as colunas de TY são preenchidas com NULL para cada linha.

O COUNT(*) então conta o número de linhas no resultado dessa junção. Há 4 linhas resultantes.

(A) Incorreta: O LEFT JOIN garante que todas as linhas da tabela da esquerda sejam incluídas no resultado, mesmo que não haja correspondência na tabela da direita.
(B) Incorreta: O número de linhas da tabela da esquerda é 4.
(C) Incorreta: O número de linhas da tabela da esquerda é 4.
(D) Correta: O LEFT JOIN retorna todas as 4 linhas da tabela TX (a tabela da esquerda). Como a condição t1.B = t2.A não encontra nenhuma correspondência em TY (pois os valores de t1.B são 1 e 2, e os de t2.A são 0 ou NULL), as colunas de TY são preenchidas com NULL para cada linha de TX. O COUNT(*) simplesmente conta essas 4 linhas resultantes. A armadilha aqui é confundir o comportamento do LEFT JOIN com o de um INNER JOIN; um INNER JOIN resultaria em 0 linhas, mas o LEFT JOIN sempre retorna todas as linhas da tabela da esquerda.
(E) Incorreta: O número de linhas da tabela da esquerda é 4.

Fonte: FGV TCE-SP 2023 Agente da Fiscalização - TI (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