Basta usar
coalesce
. É a maneira mais legível e compreensível de escrever isso. Como a lógica está contida em um predicado, é mais fácil manter e remover:select * from job where id = coalesce(:i, id)
Conforme solicitado, uma 'prova' isso realmente usa o índice:
create table x ( id number(15) null );
create unique index x_pk on x( id );
select id
from x
where id = coalesce(:x, id)
; -- Uses index
select id
from x
where id = :x or :x is null
; -- Full table scan
Plano: