Parece que o problema é que você não está usando
(+) para seu language_id checks.Sua tabela tem junção externa, então
language_id é NULL quando nenhum registro é encontrado, mas você verifica language_id = 2 , mas ? language_id é NULL . Também não vejo onde você usa resultados de
a_tl ou b_tl , acho que é apenas um problema da sua postagem, não da sua consulta original? No entanto, use junções explícitas em vez da sintaxe antiga. Depois de se acostumar, fica muito mais fácil ler e entender.
Sua consulta também pode se beneficiar do uso de
COALESCE
(ou NVL se você gostar):SELECT COALESCE( a_tl.a_disp_name, a.a_name ) AS a_name,
COALESCE( b_tl.b_disp_name, b.b_name ) AS b_name,
a.a_id,
b.b_id
FROM a
JOIN b ON ( b.b_id = a.a_id )
LEFT JOIN a_tl ON ( a_tl.a_id = a.a_id AND a_tl.language_id = 2 )
LEFT JOIN b_tl ON ( b_tl.b_id = b.b_id AND b_tl.language_id = 2 )
Espero que eu tenha entendido sua pergunta, por favor, pergunte se não funcionar.