Left Join condicional

Existe alguma forma de aplicar um LEFT JOIN condicional?

Por exemplo

Tabela A

CODIGO | DESCRIÇÃO
00001 | Andre
00002 | Pedro
00003 | Marco
00004 | Antonio

Tabela B

CODIGO | DESCRIÇÃO
00001 | Maria
00002 | Manu
TODOS | Fabiana
TODOS | Isadora
00007 | Pietra
00008 | Denise

E aplicar um Left Join entre o campo Código da Tabela A e Tabela B
e que retorne registros com o código 00001, 00002, TODOS, TODOS… em resumo quero utilizar um left join para poder pegar registros que façam relacionamento entre as duas tabelas e registros específicos da tabela B que não possuem relacionamento com a tabela A, entretanto, somente 2 registros, os registros da Tabela B 00007 e 00008 eu não quero
Para que o resultado final seja assim:

CODIGO |
TODOS |
TODOS |
00001 |
00002 |

Talvez se tu fizer o LEFT JOIN assim:

LEFT JOIN TabelaB tB ON (tB.cod = tA.cod OR tB.cod = 'TODOS')

Eu tentei dessa forma, porém assim infelizmente não me atende, meu cenário é um pouco mais complexo, eu coloquei so um exemplo de como ele é, só que dessa forma todos os registros de B se relacionam com o de A
Exemplo

CODIGO | DESCRIÇÃO
TODOS | Andre
TODOS | Pedro
TODOS | Marco
TODOS | Antonio
00001 | Andre
00002 | Antonio

Fiz algo mais ou menos assim, mas é muito feio

SELECT CODIGO, DESCRICAO 
FROM 
  TABELA_A A WITH(NOLOCK) 
  LEFT JOIN TABELA_B BWITH(NOLOCK) ON (A.CODIGO = B.CODIGO) 
WHERE 
  A.CODIGO = 'TODOS' 
  OR A.CODIGO IN (
    SELECT B.CODIGO 
    FROM TABELA_B
  )

Desse jeito funcionou? Não achei feio não, na verdade está é muito simples.

1 curtida

Funcionou, mas achei meio estranho, sei la kkkkk mas valeu pela ajuda man :grinning:

Não dará para simplificar essa condição?

Penso que assim deve funcionar

WHERE a.codigo = 'TODOS'
   OR a.codigo = b.codigo

Entao man, entra na condicao que eu comentei aqui em cima, ai nao fica legal :confused:

Não fica legal pq? Retornar registros duplicados?

E usando UNION? Ex.:

SELECT 
  CODIGO, DESCRICAO 
FROM 
  TABELA_A A
WHERE 
  A.CODIGO = 'TODOS'
UNION
SELECT 
  CODIGO, DESCRICAO 
FROM 
  TABELA_A A, TABELA_B B
WHERE 
  A.CODIGO = B.CODIGO;