EDITAR
No estoy muy seguro de lo que necesitas
- puede mostrar algún resultado esperado
- ¿Puedes decirnos qué quieres decir con "lo mata, en términos de rendimiento" (¿llega a 20 segundos de tiempo de ejecución?)
No creo que sea más eficiente, pero pruébalo.
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)
Tienes que gestionar el resultado en el SELECT
con CASE WHEN
...
Puede comparar el rendimiento y colocar índices en las columnas apropiadas (depende de lo que tenga en la tabla completa y la consulta, pero aquí debería ser id, id1 and col2
)