Compañeros, increible he podido dar con la solucion, la cual consiste en la siguiente.
1.- hacer un distinct a la columna codigo y hacerle un fulll
2.- mezclarla con las salidas y entradas
3.- en caso de tener null, reemplazarlas por 0
por siaca este es el codigo que me funciona, cualquier otra propuesta bienvenida sera
SELECT DISTINCT
REGISTROS.CODIGO, ISNULL(ENTRADAS.ENTRADAS, 0) AS ENTRADAS, ISNULL(SALIDAS.SALIDAS, 0) AS SALIDAS, ISNULL(ENTRADAS.ENTRADAS, 0)
- ISNULL(SALIDAS.SALIDAS, 0) AS SALDO
FROM REGISTROS FULL OUTER JOIN
(SELECT CODIGO, SUM(CANTIDAD) AS ENTRADAS
FROM REGISTROS AS reg
WHERE (CODIGO BETWEEN @intinicial AND @intfinal) AND (FECHA_REGISTRO BETWEEN @fecha_exist_inicial AND @fecha_exist_final) AND
(TIPO_MOV = 1) AND (CODIGO = CODIGO)
GROUP BY CODIGO) AS ENTRADAS ON ENTRADAS.CODIGO = REGISTROS.CODIGO FULL OUTER JOIN
(SELECT CODIGO, SUM(CANTIDAD) AS SALIDAS
FROM REGISTROS AS reg
WHERE (CODIGO BETWEEN @intinicial AND @intfinal) AND (FECHA_REGISTRO BETWEEN @fecha_exist_inicial AND @fecha_exist_final) AND
(TIPO_MOV = 2) AND (CODIGO = CODIGO)
GROUP BY CODIGO) AS SALIDAS ON SALIDAS.CODIGO = REGISTROS.CODIGO