Here's my posts on how to read Geometry Nodes:
This will give you the understanding on what's happening here: the Store Named Attribute node evaluates the connected field for each face corner. For corners belonging to the cylinder, the upper "UV Map" attribute exists, and the lower one doesn't (and returns $<0, 0, 0>$ values). For corners belonging to the sphere, the upper "UV Map" attribute doesn't exist (and returns $<0, 0, 0>$ values), and the lower one does. Scaling $<0, 0, 0>$ does nothing, and so scaling don't change the fact that either branch is always zero.
Adding two values (the 2nd Vector Math: Add node counting from the left), where one is zero, is like "ORing" - I explain it here:
How do I get 1 for a certain range of a value?
However, when you add (the 1st Vector Math: Add node counting from the left) a constant value to the upper branch, now not only you shift the populated data with this value, but also override the "empty" values (zeroes) with it. This is because it is at the moment of accessing the Cylinder or UV Sphere node's socket, that the evaluator tries to access existing data, and if there's none, the 3 zeroes for $xyz$ are generated.
The solution
Simply do the calculations here, before joining the geometry, by using two separate Store Named Attribute nodes with the same attribute name:
