Невозможно с обычным SQL, поскольку в нем используется логика.
Лучше всего сделать небольшой скрипт, например (в псевдокоде)
select * into #tmp from x inner join y inner join z where blabla;
if (exists (select * from #tmp))
BEGIN
select * from #tmp
END
else
BEGIN
select * from x inner join y where blabla;
END
Редактировать:
Но на вашем месте я бы всегда соединялся с C, используя LEFT JOIN, чтобы вы могли видеть, был ли результат в том или ином наборе результатов ...
например
select x.*, y.*, case when z.id is null then 0 else 1 end from x inner join y left join z on blabla where blabla;
Но это, конечно, предполагает, что вы можете изменить путь к коду, который читает результат.