РЕДАКТИРАНЕ
Не съм много сигурен от какво се нуждаете
- можете ли да покажете някакъв очакван резултат
- можете ли да ни кажете какво имате предвид под „убива го по отношение на производителността“ (стига ли до 20 секунди време за изпълнение?)
Не вярвам, че е по-ефективно, но опитайте.
select
*
from
tableA as a
left join tableB as b1
on a.id=b1.id1
and b1.col2='Red'
left join tableB as b2
on a.id=b2.id2
and b2.col2='Blue'
where
(b1.id1 is not null or b2.id2 is not null)
or (b1.id1 is null and b2.id2 is null)
Трябва да управлявате резултата в SELECT
с CASE WHEN
...
Можете да сравните ефективността и да поставите индекси в съответните колони (зависи от това какво имате в пълната таблица и заявка, но тук трябва да е id, id1 and col2
)