I've seen the following:
table = { key = value } table = { ["key"] = value }
What are the differences?
Absolutely nothing. It’s called syntactic sugar and is meant to make the syntax of a language more clean. The latter example is used when the key has white space, numerical operators, or begins with a number.