TFS provides both branching and labelling. The question is: when should I use branching and when should I use labelling?.
As a general rule:
If you just want to mark a set of code as a milestone, then label. Otherwise use branching - you never know when you will need to patch your code!
for a more detailed explanation. Buck Hodges says:
"For anything that you don't want to service or patch, labeling is sufficient. For a release that you do want to service or patch, branching is the way to go. By having a separate branch, you'll have a place to check in your changes and maintain the code while continuing development on the main branch. Using merge, you can move changes between branches."