Yep, your analysis is correct.
There are two ways depending on the data.
1. Is description and budget_version always the same for one project?
In this case, you can use
SELECT name, min(descrip), min(budget_version)
FROM ...
GROUP BY name
This is in fact tricking SQLServer since you have denormalised tables...
2. The other way is substituting your select queries in the frame I posted before. You get something like
SELECT distinct name, descrip, version
FROM projects_600
UNION
SELECT distinct name, descrip, version
FROM projects_500 p5
WHERE NOT EXISTS
(SELECT p6.name
FROM projects_600 p6
WHERE p6.name = p5.name)
This should do the trick...