SQL Merge Insert/Update with output

if object_id('tempdb..#joe') is not null
    drop table #joe;

go

declare @results table (id int);

create table #joe (id int not null identity, name varchar(100));

insert #joe
    select 'John' [name]
    union select 'Jane'
    union select 'Mary'
    union select 'Pat';

select * from #joe order by id;

declare @id int, @name varchar(100);

-- Update
--set @id = 2; set @name = 'Phil';

-- Insert
--set @id = null; set @name = 'Phil';

merge #joe tgt
using (select @id [id]) src
on tgt.id = src.id
when matched then
    update set name = @name
when not matched then
    insert (name)
    values (@name)
output inserted.id into @results;

select * from #joe order by id;
select * from @results;