If your fields can never contain whitespace, an empty field means either a tab as a first character (^\t), a tab as the last character (\t$) or two consecutive tabs (\t\t). You could therefore filter out lines containing any of those:
grep -Ev $'^\t|\t\t|\t$' file
If you can have whitespace, things get more complex. If your fields can begin with spaces, use this instead (it considers a field with only spaces to be empty):
grep -Pv '\t\s*(\t|$)|\t$|^\t' file
The change filters out lines matching a tab followed by 0 or more spaces and then either another tab or the end of the line.
That will also fail if the last field contains nothing but spaces. To avoid that too, use perl with the -F and -a options to split input into the @F array, telling it to print unless one of the fields is empty (/^$/):
perl -F'\t' -lane 'print unless grep{/^$/} @F' file