Simplemente use coalesce
. Es la forma más legible y comprensible de escribir esto. Dado que la lógica está contenida en un predicado, es más fácil de mantener y eliminar:
select * from job where id = coalesce(:i, id)
Según lo solicitado, una 'prueba' que en realidad usa el í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: