```python
from typing import List

def net_tally(sheets: list) -> str:
    if not isinstance(sheets, list):
        raise ValueError("sheets must be a list")

    report = []
    total_net = 0
    item_to_net = {}

    for sheet in sheets:
        if not isinstance(sheet, str):
            raise ValueError("sheet must be a string")

        rows = sheet.split("\n")
        for row in rows:
            if not row.strip():
                continue

            fields = row.split("|")
            if len(fields) != 3:
                raise ValueError("row must have exactly three fields")

            item, sold, returned = fields
            sold = float(sold)
            returned = float(returned)

            if item in item_to_net:
                item_to_net[item]['sold'] += sold
                item_to_net[item]['returned'] += returned
            else:
                item_to_net[item] = {'sold': sold, 'returned': returned}

            total_net += sold - returned

    report.append("ITEM     NET")
    for item, data in sorted(item_to_net.items(), key=lambda x: len(x[0])):
        net = data['sold'] - data['returned']
        report.append(f"{item.ljust(len(max(item_to_net.keys(), key=len)))} {net}")
    report.append(f"{'-' * (len(max(item_to_net.keys(), key=len)) + 5)}")
    report.append(f"{' ' * (len(max(item_to_net.keys(), key=len)))} {total_net}")

    return "\n".join(report)
```