I usually go with putting a blog within a website (e.g.,
www.yourwebsite.com/blog). This way, your main site gets direct benefit from the blog content, in terms of adding relevant content to your site and attracting links directly to your site. You can also use your blog to link to other pages within your site, channeling your internal link juice.
An external blog (e.g.,
www.yourwebsiteblog.com) will be a new site, and thus it takes time for any history and link popularity to build up, and you don't get direct benefit. Over the long term you can build this up, but why wait?
A subdomain is to some extent treated as a separate site, so that approach suffers partially from the same issues as a separate domain. You will need to build links for the subdomain for it to rank well and be competitive (since it will not inherently get the same link juice as the main site), and the benefits of inbound links to the subdomain your blog might attract don't directly benefit your main domain.
At the end of the day, any technique will work, but I've found putting a blog internal to the main site to be the most effective approach.