Francamente me gustaría hacer pruebas directas para terminar de analizar por qué te da ese resultado. Sería bueno contar con una copia de la base para probar, pero bueno...
Respecto a los nombres, MySQL trabaja en forma jerárquica con los objetos de base de datos, por eso
no es buena práctica usar los mismos nombres entre objetos distintos, como es el caso de mismo nombre para tablas, bases, columnas o variables. Eso puede hacer confundir al parser.
Uno de los resultados que he visto en ocasiones es que si pones el mismo nombre a una variable que a una tabla, la sentencia SET variable = variable devuelve NULL, porque no se puede asignar una tabla a una variable en MySQL. Esto pasa porque el objeto de mayor jerarquía pisa al de menor, y el parser interpreta que te refieres a la tabla...
Además de eso, si usas variables de usuario (las que llevan "@" como prefijo), deben ser inicializadas antes de ser usadas, porque su valor inicial es siempre NULL. Por eso un
devuelve un NULL.
Para usarla lo primero es incializarla con un valor que le defina el tipo (que tampoco tienen), y además que sea un valor sin significado: