La condición
campo +0 = valor solo tiene impacto en el uso de índices, y era útil cuando se quería forzar un fullscan con el optimizador basado en Regla (RBO), es decir:
1. El hint FULL evita el índice, pero cualquier hint (excepto RULE) provoca que el optimizador resuelva la consulta con CBO.
Código:
create table tabla1 (campo1 number);
create index ind1 on tabla1(campo1);
select /*+ full(tabla1) */ campo1
from tabla1 where campo1=valor;
2. El hint RULE (también está el parámetro OPTIMIZER_MODE=RULE) provoca que el optimizador resuelva las consultas con RBO, y en este caso, la única forma de evitar el índice es aplicando una función nula al campo.
Código:
create table tabla1 (campo1 number);
create index ind1 on tabla1(campo1);
select /*+ rule */ campo1
from tabla1 where campo1 +0 =valor;
En cualquier caso, esto ya no tiene mucho uso, el modo RBO está completamente deprecado, y el modo CBO ha evolucionado tanto en las últimas versiones que rara vez se necesita forzar su comportamiento con hints.
Saludos