SQL Server - global temporary table vs normal table
A normal table will cause logging in your database, consume space, and require log flush on every commit.  So for temporary data, you should use a temporary table.  

But you would normally use a regular (#) temporary table here, not a global (##) temporary table.

Global temporary tables are useful in the (very rare) scenario where multiple, separate sessions need access to the same temporary table.  Another scenario where a global temporary table can be useful is when the temp table is created in dynamic SQL, but referenced in the calling batch,  eg:

exec ('select * into ##foo from sys.objects')
select * from ##foo


But a global temporary table is not necessary to create a temp table in a stored procedure and access it in dynamic SQL, eg:

create table #foo(id int, data varchar(200))
exec ('insert into #foo(id,data) values (1,''hello'')')
select * from #foo


And when you create a regular temporary table in a stored procedure it will automatically be destroyed when the stored procedure ends, and you can run multiple instances of the same procedure without interfering with each other.