La sentencia que estás metiendo entre apostrofes pasa a ser simplemente un bloque de texto, y no una sentencia. MySQL no reconoce eso como una subconsulta.
Hay dos formas de resolver eso:
1) Poner directamente la consulta, ya que los apóstrofos no son necesarios si el campo devuelto es de caracteres:
Código MySQL:
Ver originalVALUES ('null','0','0','0','Rm','2','0','0',(SELECT stk
FROM articulos
WHERE arti_id
=1),'0',NOW(),NOW())
Un problema potencial en este modelo de INSERT, es si al consulta devuelve más de un registro (obviamente no es el caso). En ese caso fallaría.
2) Realizar la inserción por medio de un INSERT ... SELECT..., cosa que me parece más eficiente:
Código MySQL:
Ver originalSELECT null, 0, 0, 0, 'Rm', 2, 0, 0, stk
, 0, NOW(), NOW()
Algunos tips:
1) No pongas entre apostrofos valores numéricos a menos que le campo en la tabla no sea numérico. No sólo es innecesario, sino que obligas a MySQL a perder tiempo realizando conversiones implícitas, y además pueden esconderse errores de codificación.
2) No uses NULL entre apóstrofos. Cuando lo pones así, no representa NULL, sino la palabra "NULL", que no es lo mismo. El resultado puede no ser correcto.
3) Cuando hagas SELECTs, procura evitar usar subconsultas en el SELECT. Obligas al MySQL a ejecutar una subconsulta por cada registro devuelto en la consulta mayor. Son eficienes en el FROM o en el WHERE, pero no en el SELECT.