Grandparent was correct. Vim's basic completion is "similar words in the current file" (plus some other things), but omnicomplete is an arbitrary algorithm that can get pretty fancy. For example, in Ruby, omnicomplete on 3.14.tr will include truncate, while omnicomplete on [[1, 2]].tr will include transpose.
omnicompletion, by default, completes against words in any file currently open in any buffer. But it's also now pretty programmable, though I don't I currently use any of the languages that have good support built out for them.