text
Datos no Unicode de longitud variable, de la página de códigos del servidor y con una longitud máxima de 231-1 (2.147.483.647) caracteres. Cuando la página de códigos del servidor utiliza caracteres de doble byte, el almacenamiento sigue siendo de 2.147.483.647 bytes. Dependiendo de la cadena de caracteres, el espacio de almacenamiento puede ser inferior a 2.147.483.647 bytes.
char[(n)]
Datos de caracteres no Unicode de longitud fija, con n caracteres. n tiene que estar comprendido entre 1 y 8.000. El tamaño de almacenamiento es n bytes. El sinónimo en SQL-92 para char es character.
varchar[(n)]
Datos de caracteres no Unicode de longitud variable con una longitud máxima de n caracteres. n tiene que ser un valor comprendido entre 1 y 8.000. El tamaño de almacenamiento es la longitud actual de los datos, no n bytes. Los datos especificados pueden tener una longitud de 0 caracteres. Los sinónimos en SQL-92 para varchar son char varying o character varying.
Utilice char cuando prevea que las entradas de datos de una columna van a mantener sistemáticamente el mismo tamaño.
Utilice varchar cuando prevea que el tamaño de las entradas de datos de una columna va a variar considerablemente.
Ahí tienes la definición de cada uno, básicamente la diferencia está en la utilidad que le darás a cada uno y en la extensión.
Espero que te sirva