The "organic" nature of database development has caused us to have this in our projects.
Phase 1 - Inexperienced developers. Poor coding practice. Column names and data types from source data regardless of usage.
Phase 2 - Additional developers added. New coding practices, previous code not updated. Column names and data types more in line with usage so mismatching between tables.
Phase 3 - New management added. New coding practices based on manager's preference, previous code not updated. Mismatch of column names and data types continue.
Phase 4 - Developer turnover. Previous code copied and pasted into new code with developer preferred changes, previous code not updated.
This is how you end up with a mess. And it's why coding standards are nice but not really going to help unless you start with a good design that's enforced and developers who will adhere to the design and standards.