This should be on serverfault. However, since you're here.
A web server can be compromised in a number of different ways. Maybe someone left an FTP service running, maybe one of those apps allows you to upload files, etc. If at any time the web server is compromised then they can gain file system level access.
When they can get to the file system then they can copy your database files wholesale off of the machine. Further, with file system access they can get to your encryption keys.. Which would bypass any type of data at rest encryption you have. In other words, if the web server is cracked all of your valuable data can easily walk out the door without anyone the wiser.
By putting the database on a different server and limiting access to only the specified port AND limiting user access of the account allowed to log on to the server to only view data and only make modifications to data through controlled stored procedures then you limit exposure drastically. In other words, even if they cracked the web server they couldn't execute "drop ;" or, just as bad, "truncate ;"
Take this a step further and ONLY allow very specific ports on that box to be open. And even then, only allow them to be open to the machines that actually need to access them. For example, NEVER allow the outside world to RDP to your database server.
Defense in depth is your priority. You can't always prevent them from cracking the web box; but you can limit what they can do with that connection once there. Or at least raise the difficulty level to the point that they'll stop at just defacing the site.
Another thing: sql server is much happier on its own machine and will run faster.