Speaking as a part-time college IT instructor, NULLs serve a purpose, albeit a rather esoteric one. NULL, in hardware terms, is usually the largest negative value your machine can handle (-FFFFFFF or the like). In programming terms, it's a headache- it's not equal to ANYthing, including itself.
I allow zero-length strings in Access text fields for a simple reason: there's a discernable difference between a NULL & a zero-string. When a new record is added, the text fields will store "" (Ø-length string); if I use a text field on a form & the user highlights the value & deletes it, now it's NULL. So, if I do a case like:
Select Case True
Case tbxText = "" 'zero-length
'do something
Case IsNull(tbxText) 'NULL
'do something else
Case Len(tbxText) 'entry in field
'do yet another thing
Case Else
End Select
For the record, the Len(tbxText) operation is a handy way to determine whether or not another control (like an OK button) is enabled or not. Say you've got 3 textboxes, each of which must have something in it for the cmdOK button to be enabled; you can put the following in the Change [or KeyPress] event for each textbox:
cmdOK.Enabled = Len(tbx1) * Len(tbx2) * Len(tbx3)
Any textbox with no data will return a length of Ø (zeroing out the right-side result), which VB will treat as False in a Boolean assignment.