Esta √© uma d√ļvida comum entre desenvolvedores.

Em muitas situa√ß√Ķes, voc√™ deseja saber o c√≥digo que acabou de inserir.

Para isso precisamos saber o IDENTITY, mas qual deles? Existem 3 op√ß√Ķes.

SCOPE_IDENTITY() - Retorna o √ļltimo ID inserido dentro daquele escopo(Procedure, Fun√ß√£o, etc).
Recomendo sempre utilizar este.

¬†IDENT_CURRENT('nomedatabela') - Retorna o √ļltimo ID inserido em uma determinada tabela, independente de conex√£o, escopo, etc.

Muito Cuidado com esta, pois você pode pegar o ID de outro insert.

@@IDENTITY - Retorna o √ļltimo ID inserido na conex√£o atual, independente de tabela.

Evite usar este, a chance de ter problema é enorme.
Vamos aos testes.

CRIAÇÃO DO AMBIENTE:
CREATE TABLE Cliente
(
     CodCliente int identity(1,1) primary key,
     Nome varchar(50)
)
GO

CREATE TABLE Registro
(
     CodReg int identity(1,1) primary key,
     Nome varchar(50),
     Data datetime default getdate()
)
GO

INSERT INTO Registro(Nome) values('Teste1'),('Teste2')
GO

CREATE TRIGGER  tg_Cliente ON Cliente
For Insert
AS
    INSERT INTO Registro(Nome)
    SELECT Nome FROM inserted
GO

Verifique o cen√°rio atual:
SELECT * from Cliente
SELECT * from Registro





 --Como não tem nenhum registro na tabela Cliente, deve retornar Código 1

INSERT INTO Cliente(Nome) VALUES ('José')
SELECT Scope_Identity() as CódigoCliente

--O √ļltimo registro inserido foi 1, ent√£o ele deve retornar o C√≥digo 2

INSERT INTO Cliente(Nome) VALUES ('Jo√£o')
SELECT Ident_Current('Cliente') as CódigoCliente

--O √ļltimo registro inserido foi 2, ent√£o ele deveria retornar o C√≥digo 3, por√©m ele pega o C√≥digo 5(da tabela Registro), que foi inserido pela trigger, pois est√° na mesma conex√£o.

INSERT INTO Cliente(Nome) VALUES ('Manuel')
SELECT @@IDENTITY as Código




Muito cuidado ao utilizar estes comandos, analisem bem a situação.