It depends on your purpose, your business size, and your marketing plan.
In-house SEO is usually the best option for small businesses that don't need a lot of work to be done. It's simple, easy, and inexpensive.
On the other hand, if you have a big budget and want to get the most out of it, outsource your marketing efforts. Outsourcing means that you hire a company to do the work for you. The company will then bring together all its talents to create a great SEO campaign for you that will result in more sales than if you were to just do it yourself.