There are lots of variables that influence the correct answer to either question. From a technical standpoint, there should be no barrier to having a division of machines and/or operating systems for the app and the database. Sometimes, such a division is required; the app runs on one OS, the Database on another. Or, the combined demands of the app and the database engine are too much for one machine.
However, there may be a requirement to at least use the same OS. For example, if your app only uses Microsoft SQL, then the database server has to run Windows, although it could (and probably should) be on a separate box.
The biggest negatives to a two-machine setup are that you now have two system to administer (users, system os, hardware). There may also be a small performance penalty, since in a one server environment; all data transfers are in memory. Two server means data goes over the network.
Hope this helps.