Попробуйте что-то вроде этого:
WHERE (@id != 0 AND id_A = @id) OR (@id = 0 AND id_A != @id)
Обратите внимание, что если запросы могут возвращать существенно различное количество строк, вам следует вместо этого рассмотреть возможность разделения этого на два запроса, чтобы убедиться, что у васоптимальный план запроса для обоих запросов, что-то вроде:
IF @id != 0 THEN
BEGIN
SELECT /* columns from table */
WHERE id_A = @id
END
ELSE
BEGIN
SELECT /* columns from table */
WHERE id_A != 0
END
К сожалению, это означает дублирование остальной части вашего запроса SQL, однако, вероятно, он будет работать лучше в случае, когда один вариант возвращает большую частьТаблица однако первый вариант возвращает только одну строку.