There are lots of awesome tutorials out there, with various techniques. I'm going to show you how I do it. This creates a nice flat, invisible join. Squares block themselves - pulling into shape.
I'm working on my granny patches blanket. My squares have four rounds. The blue one is ready to be added, with three complete rounds and the fourth round done on two sides. I'll attach it on two sides, to the peach and red squares.
Let's go! Each time I go into the peach square, I'm going through two loops, just like normal crochet. With my blue on the hook, I slide the hook into the peach - working in the corner chain stitch closest to the granny set of the row I'm connecting. Grab a loop and pull through all three loops. (See visual below.)
That's the basic slip stitch you will use in each and every stitch down the row.
Slip stitch into the first DC of the first granny set.
After slip stitching in as above, make a double crochet - working in the corner of the blue square.
Continue to complete one set of three blue dc. Each time, slip stitch into the peach first, then make the dc. It should look like this...
Continue down the row until you come to the corner. The row is flat and smooth - no ridges.
We are ready for the corner! Remember - we need two chains, which in this instance, need to be slip stitches - one attaching the blue to the peach, and one attaching it to the red. Just as before, slip into the two loops of the peach chain, grab the blue and pull through. Repeat in the red.
Don't forget to make your 3 dc set, to finish the corner and begin the new side of the square - continuing along the red, with a slip stitch into each dc of the red square, and three dc sets in the appropriate places on the blue square.