The brackets are optional. They are only required if you have an entity with spaces in the name. For instance, if you were to say something like: "forms!my form with spaces in the name!control", Access would assume you intended to say "forms!my" and then followed it up with something else that should be compilable. Whereas if you wrap it in brackets: "forms![my form with spaces in the name]!control", it knows that everything in between the brackets is to be treated as the identifier you're trying to go after.
The same idea applies to specifying entities in a query. Table/query/field names may or may not be surrounded by brackets, unless the names have a space in them. Then you have no choice.