Pues obviamente algo de cómo la probaste no es correcto, porque si tomo los datos que tienes y creo las tablas, cargándolas con esos datos tendría:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
-> (1, 'Panes'),
-> (2, 'Milanesas'),
-> (3, 'Figasas'),
-> (4, 'Quesos');
Query OK, 4 rows affected (0.00 sec)
Query OK, 2 rows affected (0.00 sec)
Ahora puedo ejecutar la consulta que te propuse, con un agregado para hacer que los NULL se transformen en ceros:
Código MySQL:
Ver original -> P.id,
-> P.nombre,
-> IFNULL(SUM(v.cantidadvendida
), 0) cantidadvendida
-> producto P
+----+-----------+-----------------+
| id | nombre | cantidadvendida |
+----+-----------+-----------------+
| 1 | Panes | 5 |
| 2 | Milanesas | 0 |
| 3 | Figasas | 2 |
| 4 | Quesos | 0 |
+----+-----------+-----------------+
Y como para que veas que si le quito el IFNULL el resultado es el mismo:
Código MySQL:
Ver original -> P.id,
-> P.nombre,
-> SUM(v.cantidadvendida
) cantidadvendida
-> producto P
+----+-----------+-----------------+
| id | nombre | cantidadvendida |
+----+-----------+-----------------+
| 1 | Panes | 5 |
| 3 | Figasas | 2 |
+----+-----------+-----------------+
En resumen: El error se debe estar produciendo en la ejecución que haces tu, y no en los datos o la sentencia que te planteo.