Por un lado, a mi entender estás complicando innecesariamente la consulta.
Hacer una subconsulta en ese contexto es bastante innecesario, bien podrías escribirla así:
Código MySQL:
Ver original tabla_productos p
INNER JOIN con_stock c
ON p.ref_fabricante
= c.ref_fabricante
SET p.p_dealer
= c.p_dealer
Por otro lado, ambas consultas deberían funcionar, a menos que hubiese algún impedimento en el resultado del JOIN, por lo que sería mejor comprobar primero si esto devuelve datos:
Código MySQL:
Ver originalSELECT p.ref_fabricante
, p.p_dealer DealerOrigen
, c.p_dealer DealerDestino
tabla_productos p
INNER JOIN con_stock c
ON p.ref_fabricante
= c.ref_fabricante
;
Si esto no devuelve datos, no existe relación entre ambos.
Si devuelve datos, pero ambos dealer son iguales, no realizará actualizaciones (son innecesarias).
Si devuelve más de un producto por cada fabricante, o más de un fabricante por cada producto, entonces tienes un problema de datos que no permite realizar correctamente la actualización.
En ese caso necesitaríamos una muestra de los datos de este SELECT para ver por qué no se genera correctamente el UPDATE.