They're both correct, but we would always add 'any' to the second - "John doesn't have any money left".
Is there a difference in meaning?
Not much. 'He had no money left' is slightly more emphatic, but the meaning is the same.
Is there a diffference in usage?
American English speakers tend to prefer constructions where 'have' is an ordinary verb ( taking the auxiliary do/did), whereas a British English speaker is more likely to use both constructions.
Is there a difference in grammar?
Yes! Please don't think that the 'no' is equivalent to the Spanish 'no' which you use to negate a verb. This 'no' has nothing to do with the verb - it belongs to the noun phrase and is the opposite of 'some'. Look at it this way:
John = subject
didn't have = verb (negative)
any money = object (positive)
or
John = subject
had = verb (positive)
no money = object (negative)
The grammar is different, but the meaning is the same. You can either make the verb negative ( as in the first example) or make the noun negative ( in the second example). It's a little like in maths, where you can end up with a negative in one of two ways : either positive + negative or negative + positive. Essentially, two ways of saying the same thing.