difference between sharedMesh and Mesh

What is the difference between the two? Why is it that .mesh is always warned in danger of deprecation, and not sharedMesh? Does this have to do with batching?

In the case of MeshCollider which I assume you're talking about, there's no difference in the implementation at all anymore. mesh has been deprecated (made obsolete) and shouldn't be used anymore, and it just calls sharedMesh internally.

In the case of MeshFilter (and SkinnedMeshRenderer), calling mesh will cause an instance to be created if it hasn't already done so, allowing you to modify the mesh without manipulating all the other instances. sharedMesh (which isn't deprecated for these classes) doesn't creae a new instance, which is generally what you want to use when reading from the mesh and not modifying.