El @variable
La sintaxis en MySQL denota una variable de sesión definida por el usuario. Puede configurar estas variables de usuario fuera de un procedimiento almacenado, pero también puede configurarlas dentro de un procedimiento almacenado, y el efecto es que la variable retiene el valor después de que regresa la llamada al procedimiento.
Entonces, en su ejemplo, lo siguiente también haría lo mismo:
CREATE PROCEDURE emp_count_2()
BEGIN
SELECT COUNT(*) INTO @empCount FROM Employee;
END
CALL emp_count_2(); /* sets @empCount as a side-effect */
SELECT @empCount;
Está bien que varias sesiones establezcan la variable de usuario de esta manera al mismo tiempo, porque las variables de usuario se limitan a una sola sesión y las sesiones simultáneas pueden tener variables con el mismo nombre, pero con valores diferentes.
La sintaxis de la variable sin el prefijo @ es para las variables locales del procedimiento, ya sean parámetros del procedimiento o variables locales declaradas con DECLARAR dentro del cuerpo del procedimiento.
Este uso que tiene, pasar una variable de usuario como parámetro y asignarla en el cuerpo del procedimiento, es útil si desea llamar a un procedimiento varias veces y almacenar el resultado en variables de usuario separadas. De lo contrario, cada llamada al procedimiento sobrescribiría el valor anterior en la variable de usuario @empCount para la sesión actual.