That is just perfectly normal and documented behavior. I don't think anyone messed with the settings.

See [data type precedence](https://msdn.microsoft.com/en-us/library/ms190309.aspx) on MSDN.

As noted in the comments the empty string gets converted to 0 in any numeric type and to 1900-01-01 00:00:00.000 when converted to a date.

EDIT: I think your real problem is that your design is so that you have to join on fields of a different data type. The only way to get around this is to have a convert on your join clause which will hurt query performance. The main problem is probably with the schema design