What's the usage difference between element_validate and validate hook? From what i've learned today, there are two ways one can go about validating input.

One is the #element_validate field which is passed along the form hook, and the other is the validate hook.

Why use the validate hook if input can be validated with the #element_validate field? Is it a necessity to implement the validate hook in this case? 

Or is it a method that should be implemented for complex validation while all simple validation(is number, is date, is url) can be done via the #element_validate option?
@Haider Ali with #element_validate, we can add our own custom validation functions to a field or we can pass the validation functions provided by Drupal, e.g., element_validate_integer_positive(), element_validate_number(), etc.

This #element_validate works only on the field we added it to.

When we want to add custom validation to multiple fields, we add it in form validate hook, so that we do not need to add separate function to each field and call multiple validate functions.