The cause of incomplete/inaccurate financial data's appearing on free sites is that it is both complicated and expensive to obtain and parse these data.
Even within a single country, different pieces of financial data are handled by different authorities. In the US, for example, there is one generally recognized authority for stock prices and volumes (CQS), but a completely different authority for corporate earnings data (SEC). For futures and options data the only authority is each individual exchange. Each of these sources might have a vastly different interface to their data; some may have websites, others may have FTPs, others may have TCP datastreams to which you must subscribe, etc.
Now throw in the rest of the world and all their exchanges and regulatory agencies, and you can see how it's a difficult job to gather all this information, parse it on a daily (or more frequent) basis, and check it all for errors.
There are some companies (e.g. Bloomberg) whose entire business model is to do the above. They spend tens of millions of dollars per year to support the infrastructure and manpower required to keep such a complex system working, and they charge their consumers a pretty penny in return.
Do Google/Yahoo pay for Bloomberg data access just to display information that we then consume for free? Maybe. Maybe they pay for some less expensive reduced data set. Or a data set that is less rigorously checked for errors.
Even if they pay for the best data available, there's no guarantee that a company's last earnings report didn't have a glitch in it, or that Bloomberg's latest download from the Canadian Agency for Corporate Dividends and Moose Census-Taking didn't get cut off in the middle, or that the folks at Yahoo built a robust system that can handle a particular file's not arriving on time. Bloomberg has dozens or even hundreds of employees focused on just this one task; Yahoo probably has 5.
Moral: If you really need the best available data you must go to the source(s), or you must pay a provider to whom you can then complain when something is wrong. With free data you get what you pay for.