I just created a wallet on blockchain.info by importing my wallet.dat from Bitcoin-QT. My Bitcoin-QT shows a balance of 3.991 BTC, while blockchain.info shows a balance of 3.016.
Where does the difference come from, and which one is 'correct'?
Either one of the factors may affect either balance:
You should make sure your client is fully synchronised and all your transactions have at least one confirmation.
You should generally trust the place where you issue your transactions from to have an accurate balance of your outgoing transactions, and blockchain.info for the information available everywhere else.
As it turns out, the import did not pick up all my addresses/keys. By comparing the output from