EDITAR
Não tenho certeza do que você precisa
- você pode mostrar algum resultado esperado
- você pode nos dizer o que você quer dizer com "mata, em termos de desempenho" (ele vai para 20 segundos de tempo de execução?)
Não acredito que seja mais eficiente, mas experimente.
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)
Você tem que gerenciar o resultado no
SELECT
com CASE WHEN
... Você pode comparar o desempenho e colocar índices nas colunas apropriadas (depende do que você tem na tabela completa e na consulta, mas aqui deve ser
id, id1 and col2
)