Lo que pasa es que con la estructura de datos que tienes al hacer el query que mencionas se genera un producto cartesiano es decir tienes registros duplicados, lo mas indicado seria hacer algo como esto:
Código SQL:
Ver originalCREATE TABLE #temp
(
id_producto VARCHAR(20),
peso_especifico DECIMAL(6,2),
unidad VARCHAR(10)
)
CREATE TABLE #temp2
(
id_producto VARCHAR(20),
consumo DECIMAL(6,2),
unidad VARCHAR(10)
)
INSERT INTO #temp VALUES ('cat0100001',5.00,'LTR')
INSERT INTO #temp VALUES ('cat0100001',5.00,'LTR')
INSERT INTO #temp VALUES ('cat0100002',6937.500,'GR')
INSERT INTO #temp2 VALUES ('cat0100001',.50,'LTR')
INSERT INTO #temp2 VALUES ('cat0100002',670.00,'GR')
INSERT INTO #temp2 VALUES ('cat0100002',998.00,'GR')
SELECT t1.id_producto, t1.total-t2.total AS stock, t1.unidad FROM(
SELECT id_producto,SUM(peso_especifico) AS total, unidad FROM #temp AS t1 GROUP BY id_producto,unidad
) AS t1
LEFT JOIN
(SELECT id_producto,SUM(consumo) AS total, unidad FROM #temp2 AS t1 GROUP BY id_producto,unidad) AS t2 ON (t1.id_producto=t2.id_producto)
con ese query obtienes lo que necesitas:
id_producto stock unidad
-------------------- --------------------------------------- ----------
cat0100001 9.50 LTR
cat0100002 5269.50 GR
saludos!
P.S: Te recomiendo un mejor diseño en tu base de datos ;) por ejemplo lo que estas haciendo con 2 tablas(el ejemplo) se puede hacer con una sola, teniendo un identificador para las entradas y las salidas, asi mismo te recomiendo investigues sobre normalizacion de tablas