Here is an example situation that I have seen several times:

Code:
;Code #1
on *:TEXT:!say*:#:{
if ($2 == $null) msg $nick Syntax: !say <your message here>
else msg $chan $2-
}


Code:
;Code #2
on *:TEXT:!say*:#:{
if (!$2) msg $nick Syntax: !say <your message here>
else msg $chan $2-
}


Now, if a user types this:
!say my message

In code 1, the text 'my' is not equal to $null, so the message is sent to the channel. The same happens in code 2 because 'my' isn't 0, $false, or $null.

Now, the user type this:
!say 0
(a completely valid thing to have a bot say)

In code 1, the text '0' is not equal to $null, so the message is sent to the channel, but in code 2, '0' IS equal to 0, $false, or $null, so the syntax message is sent to the $nick instead.

(BTW, Riamus2 was correct about the typo in my original post, I missed the !).

Also, I tried doing:
!say $false

And code 1 worked as expected, but to my surprise, code 2 evaluated $2 twice and read the $false as a false value instead of literal text '$false'. That's not how I would have expected it to work, so I retract my above statement about that behaviour.

-genius_at_work