Se você entender a diferença entre escopo e sessão, será muito fácil entender esses métodos.
Um post muito bom de Adam Anderson descreve esta diferença:
Sessão significa a conexão atual que está executando o comando.
Escopo significa o contexto imediato de um comando. Toda chamada de procedimento armazenado é executada em seu próprio escopo e as chamadas aninhadas são executadas em um escopo aninhado no escopo do procedimento de chamada. Da mesma forma, um comando SQL executado a partir de um aplicativo ou SSMS é executado em seu próprio escopo e, se esse comando disparar qualquer gatilho, cada gatilho será executado dentro de seu próprio escopo aninhado.
Portanto, as diferenças entre os três métodos de recuperação de identidade são as seguintes:
@@identity
retorna o último valor de identidade gerado nesta sessão, mas qualquer escopo.
scope_identity()
retorna o último valor de identidade gerado nesta sessão e neste escopo.
ident_current()
retorna o último valor de identidade gerado para uma tabela específica em qualquer sessão e qualquer escopo.