Остальные ответы, как правило, правильные, , но на самом деле вам может быть лучше использовать 2 разных запроса и выбрать один из них в коде вызова. Хотя планы запросов умнее старых, их можно «заблокировать» на основе параметров, использованных в первом вызове. Если они нетипичны, вы можете получить план, который обычно не самый лучший. Это поведение будет варьироваться между двигателями БД (Oracle, я думаю, это довольно хорошо).
Поскольку вы уже знаете, есть ли у вас значение или нет, когда вы делаете вызов, просто выполните один бит SQL или другой.
Если у вас много значений, это может выйти из-под контроля, но при этом вы также рискуете упустить лучший план выполнения.