My favorite way to join yarn in the middle of a project:
Don't you hate it when you are crocheting blissfully along and you come to a funky place in the yarn? Maybe it is a knot or just a spot where the yarn didn't get spun well. Or sometimes there is just a glob of fiber. Well a glob of fibers not so bad, I can usually pick that out and continue on my merry way.
BUT when there is a knot or other reason you need to cut the yarn (or just change color), what I do is; cut the yarn leaving a tail about 4 inches long. Then I join the new piece of yarn by completing the last pull through of the stitch with the new yarn. I work about 10 stitches, turn my work over and find the two tails. adjust the tails so that the stitches are uniform at the join. Then I tie a square knot. I know lots of people say NO KNOTS. Well, I've been crocheting a long time and have been doing it this way more years than most of you have been alive and have never had a crocheted item come apart. Okay, now you have a knot near the top of your work, use your hook to weave one tail in and out of the back loop of your work about six times. Weave the other tail the opposite direction also in the back loop. End your weaving with the yarn tails on the back side. Now crochet away. When you come to the woven section on your next round or row, crochet right over it like it isn't even there. When you are all finished go back and trim off the little tails that remain. You won't be able to see the join, and it will NEVER come undone.
It took lots longer to type this up than it will take you to do a join. Let me know if you try this method. It beats the heck out of any other method of joining and weaving in ends.