Пара вариантов, которые вы можете выбрать здесь, вам нужно протестировать в вашей среде, чтобы увидеть, какой из них лучше всего работает.
Первый вариант - заключить первый оператор в блок if, аналогично тому, что вы сделали со вторым блоком:
BEGIN
SET NOCOUNT ON;
if exists
(
SELECT c1, c2, c3
FROM t1
WHERE id = @id
)
begin
SELECT c1, c2, c3
FROM t1
WHERE id = @id
end
else
begin
SELECT c1, c2, c3
FROM t2
WHERE id = @id
END
END
Второй вариант - использовать временную таблицу / переменную:
BEGIN
SET NOCOUNT ON;
declare @t1 table (c1 int, c2 int, c3 int)
insert @t1 (c1,c2,c3)
SELECT c1, c2, c3
FROM t1
WHERE id = @id
IF (@@ROWCOUNT = 0)
BEGIN
SELECT c1, c2, c3
FROM t2
WHERE id = @id
END
ELSE
BEGIN
select c1,c2,c3
from @t1
end
END