Ok, now I am not really sure what you want to do.
UPSERT cannot delete records for you. It's not the equivalent of the MERGE command you may know from DB2 or Oracle DBMS.
You wrote that your "FULL" table has a generated primary key and the "DELTA" uses a natural primary key. So in fact there is no direct matching between both of them (otherwise you would just keep the natural key from the "DELTA" table...)
Nevertheless you go and join the two data sets in the subquery on that key.
At this point it's time to take a step back and come up with more information on your actual tables, the data load requirements. Deletion for example needs to be specifically designed for a delta mechanism.Typically data warehouses don't delete data but timestamp it to allow reporting with a time dimension.
So before looking at what's more efficient, let's look into what is the correct solution first, ok?
- Lars