No puedes usar el IN
cláusula como esa. Se compila en un único cadena en su IN
cláusula. Pero un IN
la cláusula necesita separar valores.
WHERE id_campo not in (@idcamposexcluidos)
compila a
WHERE id_campo not in ('817,803,495')
pero debería ser
WHERE id_campo not in ('817','803','495')
Para superar esto, use SQL dinámico o en MySQL, puede usar FIND_IN_SET :
SET @idcamposexcluidos='817,803,495';
...
WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
pero usando una función como FIND_IN_SET()
no puede hacer uso de índices.