Ich verstehe bei der ganzen Konstruktion nicht, warum es nötig ist bei den Joins auf den Ref-Typ Bezug zu nehmen. Warum den Join einschränken?
SQL-Code:
select
id, ref_typ, ref,
case when ref_typ=1 then test_1.data else test_2.data end as data
from test
left outer join test_1 on ref1 = ref
left outer join test_2 on ref2 = ref
Sollte doch je nachdem performanter sein als die vielen Subselects der Variante 3.