Both compare objects of types T… So, which should your objects implement?
IComparable<T> specifies ordering, e.g. less than, equals, greater than. String class implements IComparable<T> interface with its int CompareTo(T objectToCompare) function. IEquatable<T> only tells you weather the objects are the equal or not via the bool Equals(T objectToCompare) function.
Below are the “rules of thumb” I follow: