ksh, difference between double bracket and single bracket

Can somebody tell me the difference between double brackets and single
brackets, when doing a test.

I have always been acustomed to using single brackets and have not
encountered any issues to date. Why would somebody use double brackets.

Ie

 
if [[ "$a" = "$b ]]
 
vs
 
if [ "$a" = "$b" ]
 

Thanks to all who answer

[[ ]] brackets are an extended version with a more "C-like" syntax, supporting all the usual operators as well as things like && for and instead of -a, || instead of -o.

It can also do glob-like string matching:

[[ "$STRING" == *abcd* ]] && echo "$STRING contains abcd"

Using these features means the code may not work if you try to port your code to a simpler shell.

[[ ]] is a Conditional Expression. Explained in the manual for your Shell in the "Conditional Expressions" section.
[ ] is a Test. Explained partially in the manual for your Shell in the "test" section then further in the manual for the "test" command.

Though there is much overlap in the syntax for basic conditions and tests, there are also major differences in the syntax for "and" and "or" etc. .