Похоже, что вы можете захотеть что-то подобное, когда есть две ветви запроса, из которых гарантированно не будут возвращаться данные из-за несовместимых друг с другом предикатов.
select b.*
from (select ColA from tableA
Union
select ColB from tableB) b
where exists( select 1
from tableA
where colA = 1 )
union all
select c.*
from (select ColA from tableA
Union
select ColC from tableC) c
where not exists( select 1
from tableA
where colA = 1 )
С практической точки зрения, однако, я склонен ставить под сомнение любую модель данных, которая включает в себя подобные вещи. Если вам регулярно требуется объединять данные из разных таблиц, это обычно означает, что ваша модель данных неверна. Например, вам может понадобиться дополнительная сущность, которая является родительской для A, B и C. Или вы можете объединить A, B и C в одну сущность со столбцом типа, который указывает, является ли строка буквой A, B или C.