Text data is not stored in the same record as the rest of your data. A 16 byte pointer is stored instead. This pointer points to the location where the text data is stored.
SQL Server has a maximum of 8060 bytes stored in a row. If you try to store more info that this, the data will get truncated.
Up until this point, in my reply, you may be thinking, "Sounds like I should use Text". Let me be clear about this, Text datatype should be used as a last resort.
Many of the string manipulation functions do not work with the Text data type. Many of these string manipulation functions come in handy.
I'll give you a perfect example. My online friend, DotNetGnat recently had a problem with data stored in a text field. I think he was storing resumes, which could easily exceeed the 8000 character limit of a varchar, so he correctly decided to store the data in a text field. He later discovered a problem with the data. There were some characters in the data that were causing display problems (apparently Human Resources couldn't view it properly). He wanted to replace the bad characters with spaces. It proved to be very difficult. If the data was in a varchar field, he could simply have done a replace. The whole project would have taken him 5 minutes instead of days.
-George
Strong and bitter words indicate a weak cause. - Fortune cookie wisdom