Si comprende la diferencia entre el alcance y la sesión, será muy fácil comprender estos métodos.
Una muy buena publicación de blog de Adam Anderson describe esta diferencia:
Sesión significa la conexión actual que está ejecutando el comando.
Alcance significa el contexto inmediato de un comando. Cada llamada a procedimiento almacenado se ejecuta en su propio alcance, y las llamadas anidadas se ejecutan en un alcance anidado dentro del alcance del procedimiento de llamada. Del mismo modo, un comando SQL ejecutado desde una aplicación o SSMS se ejecuta en su propio ámbito, y si ese comando dispara algún activador, cada activador se ejecuta dentro de su propio ámbito anidado.
Por lo tanto, las diferencias entre los tres métodos de recuperación de identidad son las siguientes:
@@identity
devuelve el último valor de identidad generado en esta sesión pero cualquier ámbito.
scope_identity()
devuelve el último valor de identidad generado en esta sesión y este alcance.
ident_current()
devuelve el último valor de identidad generado para una tabla en particular en cualquier sesión y cualquier ámbito.