I join my shoulders seams in one of two ways. On a straight edge shoulder I either use three needle cast off or I sew the already cast off edges together in the way I explain below.
For a simplified version of three needle cast off see this post.
When joining a shaped shoulder seam, I cast off both edges and seam together matching the columns of stitches. I want those columns to line up as closely as possible. Most instructions tell you to match the V shape of each stitch. (I'll focus on stocking stitch here.) I find this confuses the process for me because the V is right side up on the bottom piece but upside down on the top piece. That assumes you are laying the front and back of the garment out vertically. Many knitters lay the two pieces horizontally which adds another wrinkle. I'm hoping that my frame of reference may help some knitters visualize this in a different manner. I ignore the V's and look for an X instead. Be naughty here, and think of each V as having two legs that are spread.
It looks like this:
But I think of it like this, with the points aligned:
My second trick to align the stitches, is to keep in mind the half stitch mismatch between the upper and lower garment piece. If you have every worked in the opposite direction after removing a provisional cast on or done Kitchener stitch you will know what I'm referring to. When one piece is turned in the opposite direction there is one less stitch running down than up. When joining you must account for the half stitch jog. It appears only at the edge in stocking stitch. That means your first stitch is under one leg only at the outside but the next stitches all go under two legs. If you start on the top, go under one leg, * cross to the bottom piece and go under the two legs at the top of the V, cross back to the top and go under the two legs at the bottom of the V. Repeat from * moving over one V on every pass. At this point it becomes valuable to think of Xs. At the very end go under one leg only on the top piece. If there are two legs left that means you went wrong somewhere. The two halves at each end make a whole stitch which account for the jog.
The final consideration is the path of the joining yarn, it crosses from one side to the other and "wants" to make a connection in a perpendicular orientation to the knitting. This will pull the columns together vertically, especially if you maintain an even tension on each side. However there will still be a slight visual break due to opposing directionality of the Vs.
Take a look at my drawings below. One shows X's, the other shows the loop of each stitch in its entirety. You are joining the loops, however the loops are not visible in the finished knitting. Notice that in the loop drawing, the top of the "heads" of each loop align due to the half stitch at the beginning and end of of the top row.