Más o menos así:
Código sql:
Ver originalSELECT
p.id_producto,
(p.cantidad - t.total_apuntados) saldo_productos,
t.eliminado,
t.vendedor
FROM productos p INNER JOIN
(SELECT
SUM(cantidad) total_apuntados,
id_producto,
vendedor,
eliminado
FROM apuntados,
WHERE
vendedor = colname
AND apuntados.eliminado='no'
GROUP BY id_producto) T USING(id_producto)
ORDER BY id_producto;
La lógica a aplicar es al revés. Si los registros que sí o si se deben usar están en productos es esa la tabla que debes usar como pivote, y a esa le debes restar el resultado
ya sumado y filtrado de la otra. No es conveniente hacer eso fuera de una subconsulta porque obligarías al MySQL a realizar primero el JOIN a todos los registros, para luego sumar los que cumplen la condición. Eso implicaría crear una tabla temporal innecesariamente grande, ya que no todos los registros cruzados se usarán en el resultado final, cosa que si pasa con este modelo.