All the following refers to the core profile 3.2, but generally applies to all versions of GL.
The name 0 corresponds to the default texture objects (one per texture target: 1d, 2d, ... See 3.8.14, last paragraph).
So glBindtexture(2D, 0);
gets you the default texture object. It does not mean disable texturing. Now texturing from the default object results in the usual operation, just on a texture object that you have not created yourself. The initial texture object is initially incomplete, so unless you modify it, it will behave following the "incomplete" rules.
Now the specification says (3.9.2, Texture Access paragraph) that sampling from an incomplete texture will return (0,0,0,1).
So your older drivers didn't behave according to the spec.