- Habría que saber de qué tipo son los código.
- Lo mejor sería tener el PLAN de ejecución de la consulta para saber qué está pasando.
- De cuantos registros por tabla hablamos.
- ¿Esto "and valores.codigo_obracial = '40'" no debería estar en el WHERE?
- Sabiendo cuantos registros salen del la JOIN, luego habría que ver si se filtra por TIPO, cómo de eficiente es eso, y al ordenar por DESCRI, cómo de eficiente es eso.
Vamos, que sin más información, no se puede saber...