Como hacer JOIN entre tabla y procedimiento almacenado seleccionable

Es fácil, pero se presta a confusión, lo que debe tenerse en cuenta es que un procedimiento almacenado se comporta como una tabla, el uso de 1=1 es para completar la claúsula left join … on

select t1.id, sp1.field1
from t1
join sp1(parameters) on t1.id = sp1.id;

Si lo desea, también puede utilizar los campos de la tabla como valores de entrada en el procedimiento almacenado. En ese caso, asegúrese de usar LEFT JOIN para forzar a los campos de la tabla a ser evaluados primero (para que estén disponibles para el procedimiento almacenado):

select t1.id, sp1.field1
from t1
left join sp1(t1.id) on 1=1;

Ejemplo base de datos predial

select
predio.*,
sp_tarifa_impuesto.*
from       predio
left join sp_tarifa_impuesto(predio.id, 2012) on 1=1
where predio.vigente = 'S'

Buscar “Guia para elaboracion de Informe Planeacion Nacional Ver. 05 2013_02_19.txt” que contiene ejemplos de uso.

Ejemplo predial con dos procedimientos almacenados, esta consulta muestra los datos de un recibo junto con los detalles por concepto y por vigencia

select
sp_recibo_01.*,
sp_prd_mandamiento_detalles.id_concepto,
sp_prd_mandamiento_detalles.anno,
sp_prd_mandamiento_detalles.tipo,
sp_prd_mandamiento_detalles.valor,
sp_prd_mandamiento_detalles.avaluo as avaluo_vigencia,
sp_prd_mandamiento_detalles.tarifa as  tarifa_vigencia,
sp_prd_mandamiento_detalles.area_terreno_m2 as area_terreno_m2_vigencia,
sp_prd_mandamiento_detalles.area_construida as area_construida_vigencia
from      sp_recibo_01 ('s', 'where recibo.id_proceso = 1924 ')
left join sp_prd_mandamiento_detalles (sp_recibo_01.id_predio, sp_recibo_01.id_proceso, 'TODOS', 'N') on 1=1