If you already understand this, forgive me for being simplistic…
Your SQL update statement above doesn’t “copy” anything in the sense that no new rows are added to a table and/or no row is moved from one table to another.
From your update statement, I surmise you simply want to change the value in the “assigned_shift” column of the “interim” table. The value you want written to the “assigned_shift” column is the “ProdShiftNum” for the employee with the specified “ProdEmployeeID”, “shift”, and “mach_num” from the “ProdEmployee” table.
As the guys stated above, your update statement will change the “assigned_shift” value for every row in the “interim” table because there is no “where” clause. SQL server will only update rows for which the “where” clause is true. If no explicit “where” clause is given, it will update every row.
If there is only one row in the “interim” table and you don’t specify a where clause, this will likely not be a problem. But if there are multiple rows in the “interim” table and you only want to update one row, not specifying a “where” clause is going to cause you some problems.
With all that said, there is nothing obvious in your update statement that would appear to cause other columns in the table to be changed to NULL values. It is possible (but I don’t know how likely) that there is a trigger on the table that executes some logic in the background that changes the other columns. The trigger would not be obvious to you unless you are the one who defined and/or manages the table. I guess an appropriate question is, “Who is responsible for defining and managing the ‘interim’ table?” Did you set up the table?