In concurrent applications under load, asynchronous method calling can improve performance and throughput, because the calling thread is freed up to do other work.
There are edge cases where it will not help, but if your application spends any significant amount of time doing anything other than waiting for data from the database, you should see some benefit. These benefits apply to both server side and GUI applications.
For example, if your application spends 300ms waiting for data, and 300ms processing it, and you are dealing with a large number of simultaneous requests, you could potentially double throughput by using async calls, because each thread requesting data will be freed up instantly, and can then deal with data returned by a previous request.
You will rarely see this degree of improvement in practice, because requests do not arrive at nice even intervals, and generally do not each require the same amount of work. The difference should be noticeable though.
However, if you spend 300ms waiting for data, and only spend 10ms processing it, you will not see anywhere near as much improvement.
In an environment such as ASP.Net, this is very important as there are a limited number of threads available to process all incoming web requests: If all the threads are waiting on the database server, then no pages are served.
In windows forms applications, using Async calls to fetch data allows the UI to remain responsive while the data is fetched, allowing you to give the user the option of cancelling if they get bored waiting.
The obvious downside is that it makes the calling code significantly more complicated.