Q:

What hapens if I omit the "-m state" in iptables rules?

Does it automatically accept packets from all states?
On that note, what is the difference between:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

and
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

and what is recommended for everyday use?
Also, I have seen that some people use "-p tcp -m tcp" notation and some just put "-p tcp". Is it correct to put "-m tcp" right after specifying protocol?
It is my first time configuring iptables and I want to be conscious of everything I do.

A:

When you have -m <match> in the iptables command, you specify that the command can use functions from that module to test/match against certain properties of a packet. -m state is perhaps the most common, but there are a ton of interesting matchers available in iptables, for doing things like rate-limiting, quotas, etc, and you can find an overview of what's available here, organized by matcher names. 
You'll find descriptions for -m tcp and -m state in the same document, and the -m conntrack section has a good description of what the state names mean. In short, NEW,ESTABLISHED means incoming connection requests, and incoming packets which are associated with traffic going both ways, i.e. an established connection. If you didn't specify any --state at all, iptables wouldn't discriminate between NEW,ESTABLISHED and the other states INVALID,RELATED,UNTRACKED and just allow all incoming packets to port 22.
For regular use, I like being precise about what I allow through, which is why I generally use --state NEW,ESTABLISHED, though it's not completely necessary in my opinion.
For the -m tcp, you can see from the linked documentation that it gives you additional TCP-related matchers like --tcp-flags. As fas as I know, you don't need it for --source-port/--sport or --dest-port/--dport, so in most cases it's redundant. 

