c ++ – DirectX order / depth processing problem

I have what appears to be a depth processing problem or order that I had never seen before. My terrain and my water are rendered with my scroll shader, and at the moment all other models are rendered with my standard shader, and I am using the deferred representation.
Now, as you can see in the images, I have a sphere that is half cut, as if d3d thought that the water is somehow in front of the sphere, and it is not. If I move towards the water level, you can see the whole sphere.
If I render the same sphere with my scroll shader, there is no problem. If I enter my displacement shading class, and I eliminate the helmet and domain shading stages, then the terrain and the water begin to do the strange z-buffer problem that the sphere has.
Is there something conceptual in which someone can think without having to publish hundreds of lines of code? However, happy to publish code if necessary.

Thank you

enter the description of the image here

enter the description of the image here